1

我在将文件(.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");至在尝试复制任何内容之前尝试添加,也无济于事。

顺便说一句,这是一部有根电话!

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

4

2 回答 2

1

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

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

于 2013-07-09T09:23:36.297 回答
0

肯定你忘了把清单:

<manifest 
    .
    . 
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>
于 2013-12-05T06:33:52.777 回答