AndroidStudio建立完整JNI开发工程流程及Java通过JNI调用C函数
来源:互联网 发布:适合大学生交友软件 编辑:程序博客网 时间:2024/05/22 15:53
许久没写博客了,小编最近在学校的安排下到了深圳简单地学习了解了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下,运行以下代码 :
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上使用该函数了。
好了,有关于整个流程就到此为止了,有点粗枝大叶,比较适合动手操练,具体里边的逻辑,概念,请自行翻阅相关的资料。
欢迎交流学习。
- AndroidStudio建立完整JNI开发工程流程及Java通过JNI调用C函数
- Java通过JNI调用C/C++函数
- JAVA通过JNI调用C函数Demo
- JNI开发流程(androidstudio)
- jni 开发 c调用java
- jni使用基础(八)之jni使用流程及C调用java简单说明
- JNI NDK (AndroidStudio+CMake )实现Java调用C C++代码流程
- JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程
- 建立Android SDK下的JNI、JAVA应用完整步骤---Android JAVA调用C+
- JNI小程序:Java通过JNI调用C程序
- CPP通过JNI调用JAVA函数Demo
- JAVA通过JNI调用C++函数详解
- java通过jni调用C程序
- Android C 通过JNI 调用JAVA
- java通过jni调用c库
- Java通过JNI调用C语言
- Java 通过 JNI 调用 C/C++ 类库
- Java通过jni调用c语言方法
- 【贪心】17.6.1 漂流 题解
- <requestFocus /> 登录页面的输入框焦点取消方法
- VS中def文件对于生成dll和lib文件的作用
- 数据库学习(1)
- Column ' ' in where clause is ambiguous
- AndroidStudio建立完整JNI开发工程流程及Java通过JNI调用C函数
- IntelliJ IDEA Ultimate 2017激活方法
- Struts2+Spring3整合项目时遇到的一个问题
- 半编译半解释型语言
- Nginx服务器配置PHP
- poj3122 二分答案+贪心
- bzoj 3942: [Usaco2015 Feb]Censoring kmp算法
- _sqlite.so: undefined symbol: sqlite3_stmt_readonly 问题解决
- win7 X 64 tensorflow安装