2

从这篇文章

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

4

1 回答 1

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 做了同样的事情。如果你被困在某个地方,请告诉我。谢谢

于 2012-04-16T07:01:00.567 回答