来自这篇文章
http://marakana.com/forums/android/examples/49.html
我已经看到在NDK的帮助下构建应用程序会做以下事情
1>它编译所有c代码(在jni文件夹中)并使库保留在libs
文件夹
2 - ;在.apk包内,该库仍保留在lib
文件夹
在java文件中我可以使用以下代码加载该库
static {
System.loadLibrary("ndk_demo");
}
问题1: 所以现在有可能不是将该库保留为.apk的一部分而是可以在android系统中安装它而我的应用程序从系统加载?
问题2:
同样的方式我可以使用其他一些已经准备好安装在Android中的库open GL
,sqLite
吗?
答案 0 :(得分:2)
对这两个问题的回答是,你可以。
Q1: 如果你想测试它,你可以按照这种方式。
1)使用NDK编译源代码。
2)复制(adb push)你的android设备的/ system / lib中的库。运行应用程序。
加载库时,它会检查apk文件的lib文件夹或系统的/ system / lib文件夹。但要复制到/ system / lib,您应该重新安装文件系统。为此,你必须拥有root权限。
Q2:
对Q1的回答也是如此。如果库存在于/ system / lib中,您也可以调用现有库。但是有一个小问题。由于jni接口需要遵循命名约定,因此无法直接调用库中的函数。所以最终“你必须使用现有的库创建自己的库”。
步骤将是这样的:
拉图书馆(adb pull)
编写您的本机代码,该代码将调用现有库(例如OpenGL)的例程
通过将代码链接到预构建的库来编译代码(请参阅NDK文档文件。这里写得非常清楚。编译时需要在Android.mk文件中提及它。)
您最终将获得一个内部包含现有库的共享库。
我对其中一个现有的库libsqlite做了同样的事情。如果你被困在某处让我知道。感谢