Android Native 库.so加载

来源:互联网 发布:东罗马帝国 知乎 编辑:程序博客网 时间:2024/06/05 16:30

I have developed a system app for my rom which includes some native libraries.I have tried below:

  1. do not copy this native libraries into /system/lib, but let it in the apk. In this case, the libraries will not be copied to /data/data/xxxx/lib on system start and my app will failed to run since library can not found.(PackageManagerService.java 3301Note: We don't want to unpack the native binaries for system applications, unless they have been updated (the binaries are already under /system/lib). In other words, we're going to unpack the binaries only for non-system apps and system app upgrades.)

  2. copy this libraries to /system/lib. My app run correctly first, but when I upgrade it, the new version of libraries will be copied to /data/data/xxxx/lib on start up. But since android will looking for libraries at /system/lib before /data/data/xxx/lib( In DexClassLoader::findLibrary), the older version of libraries will always be loaded. It means that I will failed to upgrade native libraries then.

So, What should I do? Thanks



You can useSystem.load(), which use a full path parameter, to implement a different library search mechanism, in contrast toSystem.loadLibrary(). Below is a simple example:

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);    }}



原创粉丝点击