小奋斗 - 轻松学习从此开始!
IT小奋斗群 QQ群:62017228

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.srcDir = ['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库或者硬件的服务。

参考文献

我来评几句
登录后评论

已发表评论数(0)