我在将文件(.so 二进制文件)从资产目录复制到应用程序安装“/data/data/name.ofmy.app/lib”目录时遇到问题。
当我尝试时,我收到以下错误:
07-09 11:00:48.902: W/System.err(25122): java.io.FileNotFoundException: /data/data/name.ofmy.app/lib/libOlsrdPudWireFormat.so: 打开失败: EACCES (权限被拒绝)
当执行以下代码时会发生这种情况:
if ((so = new File(dir, fileName)).exists()) {
/*
* Check to see if this timestamp pre-dates the current package
*/
if ((pkg = new File(ctx.getPackageResourcePath())).exists()) {
if (pkg.lastModified() < so.lastModified()) {
Log.v(TAG, "extractFile: File up to date");
return;
}
}
Log.v(TAG, "extractFile: library present but out of date");
so.delete();
}
Log.v(TAG, "extractFile: copying library");
InputStream in = ctx.getAssets().open(name);
FileOutputStream out = new FileOutputStream(so);
InputStream in = ctx.getAssets().open(name);
当没有具有该名称的文件时,它会立即中断...
我一直在 Stack Overflow 上阅读类似的问题,但不幸的是,这并没有帮助。大多数是复制到 SD 卡,但我不是。
同样奇怪的是,我的资产中也提供了以前的目录(/bin 而不是/lib),它确实被复制到同一个/dat/data...目录中而没有任何问题!
我尝试添加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
权限无济于事。
我什Runtime.getRuntime().exec("su");
至在尝试复制任何内容之前尝试添加,也无济于事。
顺便说一句,这是一部有根电话!
我还仔细检查了文件是否真的存在于资产中,并且确实存在!