我可以在NDK应用程序中使用本机库(安装在Android堆栈中)吗?

从这篇文章

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 GLsqLite

对这两个问题的回答是,你可以。

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做了同样的事情。 如果你卡在某个地方让我知道。 谢谢