共享库.so文件放在lib/armeabi中的apk文件中。如何获取安装包的lib文件夹的路径
我安装库被提取到/数据/数据后,已读/ application_package/lib目录
如何我能得到这个目录的确切路径,我在运行时应用程序? 该目录是否可以被应用程序读取?或者只允许执行访问? 如果它是可读的 - 对于受版权保护的应用程序,这仍然是真的吗?
共享库.so文件放在lib/armeabi中的apk文件中。如何获取安装包的lib文件夹的路径
我安装库被提取到/数据/数据后,已读/ application_package/lib目录
如何我能得到这个目录的确切路径,我在运行时应用程序? 该目录是否可以被应用程序读取?或者只允许执行访问? 如果它是可读的 - 对于受版权保护的应用程序,这仍然是真的吗?
您可以得到确切的路径:
String libraryPath = getContext().getApplicationInfo().dataDir + "/lib";
目录及其文件是由应用程序读取。
unix权限设置为rwxr-x--x
。因此,与同组的 应用程序可以读取这些文件。
新增9
getContext().getApplicationInfo().nativeLibraryDir;
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";
}
您确定可以从此位置加载本机库吗? – lhunath 2015-07-07 16:02:18
是的,我在我的应用程序中检查过它。问题是什么? – Verdigrass 2015-07-21 09:25:29
在运行5.1.1的HTC M9 +上不起作用。 lib链接在那里,但不指向正确的目录。 Crossie的解决方案(getContext()。getApplicationInfo()。nativeLibraryDir;) – kshepherd 2016-02-04 14:58:58
也许一个设备支持不同CPU_ABIs,所以最好让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";
}
虽然我们在这,但还是有ApplicationInfo.nativeLibraryDir :-) – Ilya 2012-08-23 22:56:21