我为我的 ROM 开发了一个系统应用程序,其中包括一些 native 库。 我已经尝试过以下方法:
不要将此 native 库复制到/system/lib 中,而是将其放入 apk 中。在这种情况下,库将不会在系统启动时复制到/data/data/xxxx/lib ,并且由于找不到库,我的应用程序将无法运行。 ( PackageManagerService.java 3301 注意:我们不想解压系统应用程序的 native 二进制文件,除非它们已更新(二进制文件已经位于/system/lib 下)。换句话说,我们将仅为非系统应用程序和系统应用程序升级解压二进制文件。 )
将此库复制到/system/lib。我的应用程序首先运行正常,但是当我升级它时,新版本的库将在启动时复制到/data/data/xxxx/lib 。但由于 android 会在/data/data/xxx/lib 之前先在/system/lib 中查找库(在 DexClassLoader::findLibrary 中),所以旧版本的库将始终被加载。这意味着我将无法升级原生库。
那么,我该怎么办?谢谢
最佳答案
与System.loadLibrary()
相比,您可以使用System.load()
(它使用完整路径参数)来实现不同的库搜索机制。下面是一个简单的例子:
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);
}
}
关于android - 如何在Android系统应用程序中升级 native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11044507/