2

我为我的 rom 开发了一个系统应用程序,其中包括一些本机库。我在下面尝试过:

  1. 不要将此本机库复制到 /system/lib 中,而是将其放在 apk 中。在这种情况下,库不会在系统启动时复制到 /data/data/xxxx/lib 并且我的应用程序将无法运行,因为找不到库。( PackageManagerService.java 3301 注意:我们不想为系统应用程序解压缩本机二进制文件,除非它们已经更新(二进制文件已经在 /system/lib 下)。换句话说,我们将解压缩二进制文件仅适用于非系统应用和系统应用升级。)

  2. 将此库复制到 /system/lib。我的应用程序首先运行正确,但是当我升级它时,新版本的库将在启动时复制到 /data/data/xxxx/lib。但是由于 android 会在 /data/data/xxx/lib(在 DexClassLoader::findLibrary 中)之前在 /system/lib 中查找库,因此总是会加载旧版本的库。这意味着我将无法升级本机库。

所以我该怎么做?谢谢

4

1 回答 1

3

与. System.load()_ System.loadLibrary()下面是一个简单的例子:

public void loadLibrary(Context context, String libName) {
    String packageName = context.getPackageName();
    String libPath = "/data/data/" + packageName + "/lib/" + libName;
    if (new File(libPath).exists()) {
        System.load(libPath);
    } else {
        System.loadLibrary(libName);
    }
}
于 2012-06-27T11:14:15.913 回答