Android下用JNI让Java调用C函数
2012-03-26 08:27
218 查看
原文地址:http://blog.csdn.net/ariesjzj/article/details/7388874
基本步骤是首先将C函数编译成一个.so库,然后用Java主程序通过JNI载入库和调用其中的函数。
第一步是下载NDK,其中有些很适合入手的例子,按官方文档说的装好或解压好。
第二步:编译动态链接库。以NDK自带的sample之一hello-jni为例,先进入到该目录下,然后执行ndk-build(在NDK目录下)就能生成以下一些目录:
libs: stripped过的.so,这个是一般情况下拿来链接进最终app的库。
obj: 没stripped过的.so,这个带符号表等调试信息,debug的时候可以用。
assets, gen, res等一坨其它的东西
注意JNI下的Application.mk可指示生成的目标为针对arm还是x86平台。如果要将.so编译成x86平台的,在jni下创建Application.mk:
APP_ABI := x86
第三步:编译整个app的apk。初始的时候工程目录一般包含两个文件夹,一个jni,包含c文件,另一个src,包含java文件。在上一步编译完so后用eclipse导入项目(File->New->Project->Android Project),然后有个选项是从已有工程中载入,选中后它会自动解析Android.mk文件帮忙填好各项。
最后点eclipse中的运行,就会自动用刚才编译完的指定平台的so生成最后的可执行文件,而且自动打包成apk。如果连了n个设备记得运行前设置下用哪个。
基本步骤是首先将C函数编译成一个.so库,然后用Java主程序通过JNI载入库和调用其中的函数。
第一步是下载NDK,其中有些很适合入手的例子,按官方文档说的装好或解压好。
第二步:编译动态链接库。以NDK自带的sample之一hello-jni为例,先进入到该目录下,然后执行ndk-build(在NDK目录下)就能生成以下一些目录:
libs: stripped过的.so,这个是一般情况下拿来链接进最终app的库。
obj: 没stripped过的.so,这个带符号表等调试信息,debug的时候可以用。
assets, gen, res等一坨其它的东西
注意JNI下的Application.mk可指示生成的目标为针对arm还是x86平台。如果要将.so编译成x86平台的,在jni下创建Application.mk:
APP_ABI := x86
第三步:编译整个app的apk。初始的时候工程目录一般包含两个文件夹,一个jni,包含c文件,另一个src,包含java文件。在上一步编译完so后用eclipse导入项目(File->New->Project->Android Project),然后有个选项是从已有工程中载入,选中后它会自动解析Android.mk文件帮忙填好各项。
最后点eclipse中的运行,就会自动用刚才编译完的指定平台的so生成最后的可执行文件,而且自动打包成apk。如果连了n个设备记得运行前设置下用哪个。
相关文章推荐
- Android jni 使用C语言调用java中的log方法
- Android JNI/NDK开发(2)JNI实现C/C++与Android/JAVA相互调用
- 模仿android_debug_JNITest实现apk 调用framework java JNI中方法
- AndroidJNI 通过C++调用JAVA
- AndroidJNI 通过C++调用JAVA
- (ZT)AndroidJNI 通过C++调用JAVA
- 深入了解android平台的jni的原理以及本地多线程调用java代码
- android-JNI学习之java和c++相互调用
- AndroidJNI 通过C++调用JAVA
- Android java和C交互调用jni的一些基础知识和概念
- JNI On Mac - 从Java程序中调用C函数
- 本地方法(JNI)——从java 程序中调用C函数
- AndroidJNI 通过C++调用JAVA
- 用Android Studio通过Java代码调用C代码的JNI流程
- cocos2dx:C++层通过JniHelper调用JAVA层代码进而调用Android手机应用接口
- android jni开发 把一段java代码转换成c++方式调用
- Android中调用c函数来打印log---(JNI)
- JNI编程 —— 让C 和Java相互调用 - android - 牛蹄印章
- android jni C++ java 相互调用
- UNITY调用安桌方法出现 JNI: Init'd AndroidJavaClass with null ptr!