AndroidStudio建立完整JNI开发工程流程及Java通过JNI调用C函数

许久没写博客了,小编最近在学校的安排下到了深圳简单地学习了解了Linux系统,回校之后就对Android的底层充满了无限的兴趣。回来后,我第一件事就是想试一下NDK的开发,首先我得迈出的第一步是通过JNI调用底层的C函数。本以为很简单的一件事,做起来却耗费了不少时间,走了不少的弯路。小编看了很多大牛的文章,照着他们的步骤来做,很多是弄不出来的,尝试了各种方法,最后我总结一个简单的开发流程,一方面给有兴趣的同胞学习,另一方面用以备忘,在之后的开发,作为工具资料来使用。 

关于那些基本的概念和原理,我这里不再一一介绍了,我直接讲操作流程就好了。 

  1、首先要下载好NDK的包,并且配置好环境变量  

2、新建一个工程  

3、在File=》Project Structe目录下把NDK的地址放进去  

4、在工程目录下的local.properties下把SDK和NDK地址配置好(这里的斜杠注意要转义),这里基本编译器会帮我们搞定。

ndk.dir=D\:\\android-ndk-r13b

sdk.dir=C\:\\。。。\\Android\\Sdk  

5、在你要调用C函数的类下边声明你要从C代码调用的函数,如  

public native String sayHello();  

6、接着打开AndroidStudio下边的终端(Termianal),把工作目录切换到src/main/java下,运行以下代码

扫描二维码关注公众号,回复: 2706377 查看本文章

javah -d ../jni 你的包名(全类名).引用本地方法的类的名称

Note:代码的含义是根据你声明的本地方法在上一级目录下生成一个jni的目录,以及在目录下生成一个相应的.h文件  

7、复制jni的主体结构,建立一个C文件  

8、接着,在App->build.grradle=> defaultconfig (项的后面加上)  

ndk {  

moduleName"myNativeLib"  

ldLibs "log", "z", "m"  

abiFilters "armeabi", "armeabi-v7a", "x86"}  

Note:这会生之后生成一个libmyNativeLib.so文件,以及相应三种硬件架构的文件夹及相对应的文件。  

9、在此点Build=>Make project,如果生成过的,就就Rebuild project  

10、完成编译、链接后可以在app=>build=>intermediate=>ndk=>debug=>lib下会有上边moduleName配置生成的.so动态链接库

11、最后,当然是加载动态链接库了,在public native函数声明的上方,用static加载动态链接库 如:(看自己生成的库来改!)

static {  

System.loadLibrary("myNativeLib");  

}  

12、最后,就可以在java上使用该函数了。  

好了,有关于整个流程就到此为止了,有点粗枝大叶,比较适合动手操练,具体里边的逻辑,概念,请自行翻阅相关的资料。 

欢迎交流学习。

猜你喜欢

转载自blog.csdn.net/jakera/article/details/72847152