摘自本文
http://marakana.com/forums/android/examples/49.html
我已经看到在 NDK 的帮助下构建的应用程序做了以下事情
1> 它编译所有 C 代码(在 jni 文件夹内)并生成位于 libs
文件夹中的库
2> 在 .apk 包内,该库也位于 lib
文件夹内
在java文件中我可以使用以下代码加载该库
static {
System.loadLibrary("ndk_demo");
}
问题1: 那么现在是否有可能,我可以将其安装在 Android 系统中并从系统加载我的应用程序,而不是将该库保留为 .apk 的一部分?
问题2:
同样,我可以使用 Android 中已安装的其他库,例如 open GL
、sqLite
吗?
最佳答案
这两个问题的答案都是“是的”,您可以。
第一季度: 如果你想测试一下,可以按照这个方法。
1)使用NDK编译源代码。
2) 将库复制(adb push)到 Android 设备的/system/lib 中。运行应用程序。
当您加载库时,它会从 apk 文件的 lib 文件夹或系统的/system/lib 文件夹进行检查。但要复制到/system/lib 中,您应该重新挂载文件系统。为此,您必须拥有 root 权限。
第二季度:
对问题 1 的回答也回答了这个问题。如果该库存在于/system/lib 中,您也可以调用现有的库。但有一个小问题。由于 jni 接口(interface)遵循命名约定,因此您不能直接调用库内的函数。因此最终“您必须使用现有库创建自己的库”。
步骤如下:
拉取库(adb pull)
编写您的 native 代码,该代码将调用现有库(例如 OpenGL)的例程
通过将代码与预构建的库链接来编译您的代码(请参阅 NDK 文档文件。它非常清楚地写了如何执行此操作。您需要在编译时在 Android.mk 文件中提及它)。
您最终将获得一个内部包含现有库的共享库。
我对现有库之一 libsqlite 做了同样的事情。如果您被困在某个地方,请告诉我。谢谢
关于android - 我可以在 NDK 应用程序中使用 native 库(安装在 Android 堆栈中)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10169336/