美文网首页
Android Studio JNI开发-1

Android Studio JNI开发-1

作者: lengyan_zhao | 来源:发表于2017-05-25 10:54 被阅读80次

    JNI和NDK的区别:

    1、什么JNI

    Java Native Interface(JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机(VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。

    上面过程分为2个部分:

    第一、用C语言生成一个库文件。

    第二、在java中调用这个库文件的函数。

    2、NDK

    NDK全称:Native Development Kit。

    NDK是一系列工具的集合。

    * NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。

    * NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

    * NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

    jni的具体开发步骤:

    第一步:

    在AS上创建空项目AndroidNDK,和其他正常创建项目一致;

    第二步:

    选择项目设置ndk路径(如果之前没有下载过ndk,该界面会有下载链接):

    第三步

    在根目录下的gradle.properties文件下面添加设置:android.useDeprecatedNdk=true,如果不加的话,会直接报错:

    第四步

    在main文件夹下面添加jni文件夹,并且添加对应的.c文件和empty.c(网上说不添加空的.c文件会报错,但是我并没有报错)

    第五步

    创建对应的.h文件,首先创建对应的本地方法的类(将所有可能用到的本地方法都尽可能写到该类中,这样就可以降低耦合度),写好对应的native方法之后,build项目,然后在..\build\intermediates\classes\debug目录下(可以找到创建的类的.class文件),执行命令:

    javah -jni (类全名)

    就可以生成对应的.h文件,将该文件复制到第四步中创建的jni文件夹下面即可。

    第六步

    在当前jni开发模块下的build.gradle文件中配置.so文件的信息:

    moduleName:表示so文件的模块名称;

    ldLibs://添加log依赖库文件

    abiFilters://表示不同的cpu类型

    完成之后,就可以编译生成对应的.so文件在..\build\intermediates\ndk 下就可以看到;

    第七步

    在创建的本地方法类中静态加载so文件:

    /**

    * 静态加载.so文件

    * 注意加载的so文件名称和build.gradle中的moduleName保持一致

    * 即没有lib前缀的文件名

    */

    static{

    System.loadLibrary("fm");

    }

    第八步

    在jni对应的.c方法中编写测试方法,判断是否调用成功!

    /*

    * Class:    com_fmblzf_androidndk_ndk_AndroidNDK

    * Method:    test

    * Signature: (Ljava/lang/String;)Ljava/lang/String;

    */

    JNIEXPORT jstring JNICALL Java_com_fmblzf_androidndk_ndk_AndroidNDK_test

    (JNIEnv *env,jobject obj,jstring str){

    return(*env)->NewStringUTF(env,"调用成功!");

    }

    测试通过!!!

    至此jni的开发环境以及基本的配置寂静完成!

    源码下载

    接下来会继续编写jni实际开发!

    相关文章

      网友评论

          本文标题:Android Studio JNI开发-1

          本文链接:https://www.haomeiwen.com/subject/ddvaxxtx.html