ファイル (.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);
その名前の既存のファイルがない場合、すぐに壊れます...
ここスタック オーバーフローで同様の質問を読んでいますが、残念ながらそれは役に立ちませんでした。ほとんどの人はSDカードにコピーしていますが、私はそうではありません。
また、奇妙な点は、アセット内で提供されている以前のディレクトリ (/lib ではなく /bin) が、同じ /dat/data... ディレクトリに問題なくコピーされることです!
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
許可を無駄に追加しようとしました。
Runtime.getRuntime().exec("su");
何かをコピーしようとする直前に追加しようとしましたが、これも役に立ちませんでした。
ところで、それはルート化された電話です!
ファイルが実際にアセットに存在するかどうかも再確認しましたが、存在します!