【问题标题】:Android exception 'open failed: EACCES (Permission denied)' - not due to the SD cardAndroid异常'打开失败:EACCES(权限被拒绝)' - 不是由于SD卡
【发布时间】:2013-07-09 09:17:18
【问题描述】:

我在将文件(.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); 处中断...

我一直在 StackOverflow 上阅读类似的问题,但不幸的是,这并没有帮助。大多数都在复制到 SD 卡,但我没有。

另外奇怪的是,我的资产中也提供了以前的目录(/bin 而不是 /lib),它确实被复制到同一个 /dat/data... 目录中而没有任何问题!

我尝试添加&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt; 权限无济于事。

我什至尝试在尝试复制任何内容之前添加Runtime.getRuntime().exec("su");,但也无济于事。

顺便说一句,这是一部植根手机!

我还仔细检查了该文件是否真的存在于资产中,并且确实存在!

【问题讨论】:

  • 将此评论作为答案移动

标签: android


【解决方案1】:

只是为了尝试,我将目录名称从 lib 更改为 libs(因为正如我的问题中提到的,我还复制了另一个名为 /bin 的目录,没有任何问题)并猜猜看:现在它可以工作了!

您在复制时似乎不能使用/lib 目录名。不过,我不知道为什么。

【讨论】:

  • 使用 android 我偶尔可以使用 dd 而不是 cp 而 cp 不起作用。远射,但可以做你需要的
  • 这是一个很好的提示,但在我的具体情况下,我使用文件流进行复制而不是使用 linux 命令!!!
【解决方案2】:

你肯定忘了把清单放进去:

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

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 2014-02-07
    • 2021-12-23
    • 2021-07-02
    • 2016-01-06
    • 1970-01-01
    相关资源
    最近更新 更多