本文主要是介绍android应用程序jni访问C库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
应用程序访问C库 –通过jni访问
如果应用程序,需要访问C的动态库,可以通过ndk的方式生成动态库,也可以在ubuntu中通过命令行得到动态库。本文通过命令行的方式得到动态库libhardcontrol.so
交叉编译
arm-linux-gcc -fPIC -shared hardcontrol.c -o libhardcontrol.so -I /usr/lib/jvm/java-1.7.0-openjdk-arm64/include/ -nostdlib libc.so的目录
编译出的文件libhardcontrol.so
如果在android系统级别的开发,动态库可以在 /vendor/lib 或者 /system/lib 下;
也可以在 应用程序包中
应用程序中,怎么操作
app/libs/下创建armeabi子目录。放入so文件
修改 app下的build.gradle
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
可能会出现找不到lib.so.6
在/vendor/lib/ /system/lib/libc下没有这个lib.so.6
可以在编译的时候添加 -nostdlib 这样不会自动的使用标准的ilibc
此时需要指定使用那个
find -name “libc.so”
找一个版本比较高的
-nostdlib so的目录
arm-linux-gcc -fPIC -shared hardcontrol.c -o libhardcontrol.so -I /usr/lib/jvm/java-1.7.0-openjdk-arm64/include/ -nostdlib libc.so的目录
总结
- 仅仅是应用程序通过jni的方式访问C库。那么就是在jni中进行操作或者访问硬件。
- 如果在android系统级别的开发中,对于硬件的访问一般是用通过hal来实现的。
系统给应用程序提供访问C库或者硬件的服务。
参考文献
- [Android Studio 之 NDK篇](
http://www.cnblogs.com/ouyangduoduo/p/5900040.html) - javah 生成jni所需头文件
在使用javah 生成头文件的实话,需要将目录的/ 改成 . 来进行。
这篇关于android应用程序jni访问C库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!