Android异常'打开失败:EACCES(权限被拒绝)' - 不是由于SD卡

时间:2013-07-09 09:17:19

标签: android

我在将资源目录中的文件(.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!

我还仔细检查了文件是否真的存在于资产中,它是!

2 个答案:

答案 0 :(得分:1)

仅仅是为了尝试我将目录名从lib更改为libs(因为我在问题中提到过,我还复制了另一个名为/bin的目录,没有任何问题)猜猜看:它现在有用了!

在复制时似乎无法使用/lib目录名。但我不知道为什么。

答案 1 :(得分:0)

你肯定忘了放入清单:

<manifest 
    .
    . 
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>