如何获取已安装包的lib文件夹的路径

时间:2010-04-08 21:39:50

标签: android android-ndk

共享库.so文件放在lib / armeabi的apk文件中。

我已经在安装后读取了libs被解压缩到/ data / data / application_package / lib

如何在运行时获取应用程序中此目录的确切路径? 该目录是否可由应用程序读取?或者只允许执行访问? 如果它是可读的 - 对于受复制保护的应用程序是否仍然如此?

6 个答案:

答案 0 :(得分:33)

在API级别9中添加

getContext().getApplicationInfo().nativeLibraryDir;

答案 1 :(得分:11)

您可以通过以下方式获得确切路径:

String libraryPath = getContext().getApplicationInfo().dataDir + "/lib";

应用程序可以读取目录及其文件。

unix权限设置为rwxr-x--x。所以申请用 同一组可以读取文件。

答案 2 :(得分:0)

String libraryPath = context.getFilesDir().getParentFile().getPath() + "/lib";

为获得更好的兼容性,请使用以下功能:

@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public static String getLibraryDirectory(Context context) {
    int sdk_level = android.os.Build.VERSION.SDK_INT;

    if (sdk_level >= Build.VERSION_CODES.GINGERBREAD) {
        return context.getApplicationInfo().nativeLibraryDir;
    } 
    else if (sdk_level >= Build.VERSION_CODES.DONUT) {
        return context.getApplicationInfo().dataDir + "/lib";
    }

    return "/data/data/" + context.getPackageName() + "/lib";
}

答案 3 :(得分:0)

也许设备支持不同的CPU_ABI,所以最好得到包含所有子lib目录的nativeRootLibraryDir:

public static String getNativeLibraryDirectory(Context context) {
    int sdk_level = android.os.Build.VERSION.SDK_INT;

    if (sdk_level >= Build.VERSION_CODES.GINGERBREAD) {
        try {
            String secondary = (String) ApplicationInfo.class.getField("nativeLibraryRootDir").get(context.getApplicationInfo());
            return secondary;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    else if (sdk_level >= Build.VERSION_CODES.DONUT) {
        return context.getApplicationInfo().dataDir + "/lib";
    }

    return "/data/data/" + context.getPackageName() + "/lib";
}

答案 4 :(得分:0)

String libpath = getApplicationInfo().nativeLibraryDir;

使用的类:导入android.content.pm.ApplicationInfo;

答案 5 :(得分:0)

如果您使用的是本机活动和C ++,则:

<script type="text/javascript">
    var myImgSrc = document.getElementById("thumb").getElementsByTagName("img") 
[0].src;
    var evt = new Event(),
    m = new Magnifier(evt);
    m.attach({
        thumb: '#thumb',
        large: 'myImgSrc',
        largeWrapper: 'preview'
    });
</script>