我为我的rom开发了一个系统应用程序,其中包括一些本机库。 我试过以下:
不要将此本机库复制到/ system / lib中,而是将其放入apk中。在这种情况下,系统启动时不会将库复制到/ data / data / xxxx / lib,因为找不到库,我的应用程序将无法运行。 ( PackageManagerService.java 3301 注意:我们不想解压缩系统应用程序的本机二进制文件,除非它们已经更新(二进制文件已经在/ system / lib下)。换句话说,我们将仅针对非系统应用程序和系统应用程序升级解压缩二进制文件。 )
将此库复制到/ system / lib。我的应用程序首先正确运行,但是当我升级它时,新版本的库将在启动时复制到/ data / data / xxxx / lib。但是由于android将在/ data / data / xxx / lib(在DexClassLoader :: findLibrary中)之前在/ system / lib中查找库,因此将始终加载旧版本的库。这意味着我将无法升级本机库。
那么,我该怎么办?感谢
答案 0 :(得分: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);
}
}