一、官方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. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android(安卓)Studio中Android(安卓)Device Monitor的file explo
  4. linux下eclipse启动android模拟器出现PANIC: Could not open: /h
  5. android 反编译
  6. Android(安卓)Log系统介绍 (基于Android(安卓)N)
  7. android菜鸟学习笔记16----Android项目打包安装过程(Run as Andr
  8. golang开发android应用(二) - go语言生成android动态库
  9. android LinearLayout添加分隔线

随机推荐

  1. Android背景选择器selector
  2. Android消息机制(五) Service IntentServ
  3. Android相对布局RelativeLayout各属性介
  4. Android重量级开发之--提高android启动速
  5. Android(安卓)单元测试之Espresso - Goog
  6. Android用户界面UI组件--AdapterView及其
  7. Android界面布局之gravity
  8. Android-- gravity、layout_gravity、pad
  9. Android系统自带样式(@android:style/)
  10. Android(安卓)ImageView类