我在将资源目录中的文件(.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:open failed:EACCES(Permission拒绝)
当以下代码被执行时会发生这种情况:
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");
,但也无济于事。
这是一部根深蒂固的手机BTW!
我还仔细检查了文件是否真的存在于资产中,它是!
答案 0 :(得分:1)
仅仅是为了尝试我将目录名从lib
更改为libs
(因为我在问题中提到过,我还复制了另一个名为/bin
的目录,没有任何问题)猜猜看:它现在有用了!
在复制时似乎无法使用/lib
目录名。但我不知道为什么。
答案 1 :(得分:0)
你肯定忘了放入清单:
<manifest
.
.
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>