Android Studio 第一个JNi工程

来源:互联网 发布:java生成随机数的方法 编辑:程序博客网 时间:2024/06/01 09:49

利用AS创建第一个JNI工程

步骤:

1.下载AS。我安装的是AS 2.2.3.

    下载方法很多,大家可自行下载。

2.下载NDK,配置环境变量。

    1) 下载  AS内提供下载NDK的接口,File-->Settings--->Android SDK--->SDK Tools--->NDK 直接上图。

      

   2)配置环境

       A: 创建环境变量 

            变量名:NDK_ROOT(貌似大家都用这个)

            变量值:C:\Users\h218072\android-sdks\ndk-bundle(你存放NDK的地方)

       B:Path中添加NDK,可全局使用NDK的命令。

           末尾添加%NDK_ROOT%;

       C:验证NDK

           在cmd中输入命令ndk-build。如果出现下图提示,说明环境配置成功。

                   

3.下载JDK,配置环境变量。

    1)下载JDK。下载方式很多,我用的是jdk1.7.0_17

    2)JDK环境变量配置

A: 创建环境变量 

             变量名:JAVA_HOME(貌似大家都用这个)

             变量值:C:\Program Files\Java\jdk1.7.0_17(你存放JDK的地方)

        B:添加CLASSPATH。

           变量名:CLASSPATH

           变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

        C:Path中添加JDK,可全局使用JDK的命令。

           末尾添加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;;

        D:验证JDK

           在cmd中输入命令java -version。如果出现下图提示,说明环境配置成功。

        


4.配置AS下NDK环境

   File--->Project Structure --->Android NDK location  如果你之前没有下载ndk,可点击download下载,如果你已经下载了NDK,可选择Select default NDK或者自行找到你保存的NDK

  

5.创建JNI文件,且编译生成.o文件

   1)在MainActivity中添加如下代码,java中调用jni生成库文件。

   public static native int calculate(int numa,int numb);   static {        System.loadLibrary("MyJni");   }

   2)打开AS自带的Terminal,生成.h文件

   cd到app\src\main\java,输入命令javah -jni com.main.myjniapp.MainActivity 生成如图所以的.h文件

   

   3)app右键--->new--->Folder--->JNI Folderapp下面会多出来一个CPP,其实它的正确路径是这样的MyJniApp\app\src\main\jni

      然后将上面生成.h move到jni文件夹下面。

      

  4)创建.c文件

    cpp右键--->new--->C/C++ source file--->选择.c或者.cpp,名字为了统一,我依然写的同.h的文件名

   

   创建的.c中添加实现代码 

  #include <com_main_myjniapp_MainActivity.h>  JNIEXPORT jint JNICALL Java_com_main_myjniapp_MainActivity_calculate(JNIEnv *env, jclass cls, jint numa, jint numb) {      return numa * numb;  }

   5)生成.o文件

   创建Android.mk 添加如下代码

  LOCAL_PATH := $(call my-dir)  include $(CLEAR_VARS)  LOCAL_MODULE := MyJni  LOCAL_SRC_FILES := com_main_myjniapp_MainActivith.c  include $(BUILD_SHARED_LIBRARY)
    在AS自带的Terminal中cd到jni下面,运行ndk-build。完成后,在app\src\main\libs下面会找到libMyJni.so。

6.配置android工程调用NDK的环境。
   1)添加显示调用jni计算结果的代码

  private TextView Jni_text;  Jni_text= (TextView) findViewById(R.id.Jni_text);  Jni_text.setText("5*6="+calculate(5,6));

   2)在gradle.properties中添加如下代码

Android.useDeprecatedNdk=true

   3)在build.gradle中android()末尾添加如下代码 

   sourceSets {        main {            jni.srcDirs = []            jniLibs.srcDir 'src/main/libs'        }    }

6.编译且验证。

   点击build--->Make project。如果没有error说明编译完成。

   然后点击Run--->run app.在模拟器中验证结果


到这里我相信大家已经对As创建简单调用jni的流程有了清晰的理解。