一、官方Demo的运行

        1、下载android-ndk。

             官方下载地址、国内下载地址

        2、配置环境变量

            在path路径下添加自己ndk的路径。例如我的是:E:\android\developer\android-ndk-r9d

        3、导入官方Demo程序

            E:\android\developer\android-ndk-r9d\samples\hello-jni

        4、在命令行切换到项目的目录下,执行ndk-build命令生成.so文件

        5、运行程序在手机上即可。

二、写自己的第一个Jni程序

        1、新建一个android项目MyHelloJni

        2、在MainActivity中添加一个本地方法

             public native String getStringFromC();

        3、在项目的根目录下创建一个jni文件夹

        4、在命令行中切换到项目的根目录下,使用javah命令生成jni要使用到的.h文件

             javah -classpath bin\classes;路径\android.jar -d jni 报名.类名

        5、刷新项目,在jni目录下即可看到生成的.h文件

        6、在jni目录下新建文件hello.c

        7、编辑hello.c文件

             #include
             #include
             #include "com_goodocom_myhellojni_MainActivity.h"

             在.h文件中copy要实现的方法

             JNIEXPORT jstring JNICALL Java_com_goodocom_myhellojni_MainActivity_getStringFromC
  (JNIEnv *, jobject);

              添加参数名

             JNIEXPORT jstring JNICALL Java_com_goodocom_myhellojni_MainActivity_getStringFromC
  (JNIEnv * env, jobject obj)

             添加方法体

             JNIEXPORT jstring JNICALL Java_com_goodocom_myhellojni_MainActivity_getStringFromC
  (JNIEnv * env, jobject obj){
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}

              保存hello.c文件

           8、在jni目录下添加Android.mk文件

           9、添加一下内容

               LOCAL_PATH := $(call my-dir)

               include $(CLEAR_VARS)

               LOCAL_MODULE    := hello
               LOCAL_SRC_FILES := hello.c

               include $(BUILD_SHARED_LIBRARY)

           10、修改.mk文件

             //生成.so文件的名称

             LOCAL_MODULE    := hello

            //要加载的.c文件名称

             LOCAL_SRC_FILES := hello.c

            11、在命令行切换到项目根目录下,执行ndk-build命令,即可在lib目录下生成armeabi文件夹,armeabi目录下就是生成的.so文件

            12、在MainAcitivity中使用静态代码块,加载.so文件

              static{
                      System.loadLibrary("hello");
               }

              注意:加载库的名称为自己在.mk文件中修改的名称,而非生成的.so文件的名称。这里就是“hello”,而非“libhello.so”。

              13、调用本地方法。

                      Log.d("MainActivity", getStringFromC());

              14、运行程序,即可在控制台看到getStringFromC()返回的结果

            

更多相关文章

  1. Android经典项目案例开发实战宝典
  2. Android Studio 3.5中导入项目时关于Gradle错误的解决
  3. android菜鸟学习笔记16----Android项目打包安装过程(Run as Andr
  4. Android根文件系统分析
  5. 在Android java代码中如何改变文件的权限
  6. 《Android学习指南》文件夹
  7. android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位
  8. android下载编译以及文件系统提取总结
  9. Android 文件保存与读取

随机推荐

  1. Android(安卓)7.0 CTS问题CtsShortcutHos
  2. Minimum SDK、Target SDK、Compile SDK区
  3. popuwindow
  4. 关于android编译失败的集中情况
  5. webView 夜间模式
  6. ch05 Android布局
  7. Android(安卓)view中invalidate方法学习
  8. Android(安卓)SAX解析xml为java
  9. Apple iPad 的替代产品大比拼
  10. 获取当前locale