第一步:新建一个java类,比如我新建MyJNI.java,并且在里面加载项目的so库,比如我的项目名字为JNITest,就loadLibrary("JNITest"), 并且定义自己要使用的方法 public class MyJNI { //加载so库 static { System.loadLibrary("JNITest"); } //需要在Activity中用到的方法 public static native String printHello(); }第二步:使用javac命令生成MyJNI的class文件:javac MyJNI.java 第三步:生成.h文件:打开命令行跳转到:项目的根目录->app->src->main->java,然后输入 javah -jni 你的类的包名.类名,比如我的是: javah -jni com.example.ll.jnitest.MyJNI,成功后会app->src->main->java下面生成一个.h文件,比如我的是: com_example_ll_jnitest.MyJNI.h 第四步:在app->src->main下面新建文件夹jni,然后在里面新建c/c++文件,比如我新建Test.c文件,然后把上一步生成的.h文件里面的内容全部 复制到里面并且实现里面的方法,我的是:/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_example_lloydfinch_rxjavatest_MyJNI */ #ifndef _Included_com_example_lloydfinch_rxjavatest_MyJNI #define _Included_com_example_lloydfinch_rxjavatest_MyJNI #ifdef __cplusplus extern "C" { #endif /* * Class: com_example_lloydfinch_rxjavatest_MyJNI * Method: printHello * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_lloydfinch_rxjavatest_MyJNI_printHello (JNIEnv *env, jclass jobj){ return (*env)->NewStringUTF(env,"JNI Test!"); } #ifdef __cplusplus } #endif #endif第五步:在jni文件夹下新建一个空白的util.c文件 第六步:配置环境,在local.properties文件中设置ndk的路径,比如我的是:ndk.dir=/Users/lloydfinch/venn/soft/sdk/android-sdk-macosx/ndk-bundle,然后在app下面的build.gradle里面的 defaultConfig里面添加:
ndk { moduleName "JNITest" ldLibs "log", "z", "m" abiFilters "armeabi", "armeabi-v7a", "x86" }然后在gradle.properties文件的最后一行添加:android.useDeprecatedNdk=true 即可 第七步:生成so文件:rebuild一下你的项目,即可在 app\build\intermediates\ndk\debug\lib下面生成一堆文件 第八步:配置和使用,在app->src->main->java下面新建文件夹jniLIB,然后将上一步生成的so文件全部复制到此处,然后在我们的Activity里面 就可以直接调用第一步的java类里面声明的方法了:String str = MyJNI.printHello();
Android Studio进行JNI开发
最新推荐文章于 2023-08-05 16:24:02 发布