3

obb 拡張にパックした .so ファイルがあります。約20メガバイトです。

私は使用しようとしています

System.load("/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so");

ライブラリをロードします。しかし、私はエラーが発生します:

dlopen("/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so", RTLD_LAZY) に失敗しました: dlopen に失敗しました: "/storage/emulated/0/Android/obb/com. mypackage.myapp/libtest.so" セグメント 2: 許可が拒否されました

type=1400 audit(0.0:8): avc: denied { execute } for path="/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so" dev="fuse" ino=367663176224 scontext =u:r:untrusted_app:s0 tcontext=u:object_r:fuse:s0 tclass=file permissive=0

そのため、実行可能ファイルをそこに置くことは許可されていないことに気付きました。

だから私の質問は、

1-これを行うには、ファイルをどこに抽出する必要がありますか?

2- どの関数呼び出しを行う必要がありますか?

ありがとうございました。

4

1 に答える 1

3

ファイルをアプリのプライベート内部ストレージ フォルダーの下の任意の場所にコピーします。ファイルが読み取り専用で実行可能であることを確認してください (特に他のユーザーによる書き込み不可!)。これは、実行可能ファイルが許可されているアプリケーションによって通常書き込み可能な場所の唯一のツリーです。

getFilesDir()初期化されたアクティビティまたはサービス コンテキストを呼び出すことで、プライベート フォルダーの場所を特定できます。

ここには、Java でのファイル コピーのメカニズムを示すいくつかの既存の質問があります。

于 2015-05-14T15:24:49.223 に答える