17

Android NDKツールチェーンを使用してバイナリをコンパイルし、デバイスにデプロイしようとしています。JNIを使​​用してNDKで構築されたアプリケーションは、ネイティブコードを介してこのバイナリを実行します。私はデバイスをroot化することを避けたいと思っています。

バイナリは複数のアプリケーションで使用されるため、アプリケーションごとに1回ではなく、共有の場所に保存したいと思います。

このバイナリをデプロイする適切な場所が見つかりません-これらは私が試した場所です:

  1. / mnt / sdcard - SDKのgetExternalStoragePublicDirectory()を使用しますが、SDカードはnoexecとしてマウントされているため、実行できません。

  2. / system / bin-読み取り専用のファイルシステムであるため、コピーできません。以下を使用してエミュレータに/systemを再マウントすると、adbpushを使用してファイルをプッシュできます。

    mount -o rw,remount -t yaffs2 /dev/block/mtd3 /system
    

    ただし、デバイスをルート化する必要があるため、これは避けたいと思います。

  3. / data / local -adb pushを使用して、バイナリをこの場所にプッシュできます。ただし、コードでこれを行う方法を見つけることができないようです(Android SDKを使用)。内部ストレージメカニズムは/data/ data/packageを指します。

NDKツールチェーンに付属のarm-linux-androideabi-g++を使用して、この実行可能ファイルを呼び出すネイティブコードをコンパイルしました。これは、 / system/binおよび/data/localのバイナリで機能します。

要約すると、Androidファイルシステム内で、プロジェクトの/assetsフォルダーからファイルをコピーできる場所を探しています。この場所で世界的に実行可能なアクセス許可が可能です。

4

3 に答える 3

11

/data/local/tmp/"/data/data/" + packageName + "/files"

直接テストの場合は、バイナリをターゲットにします。最初に推奨されます。

于 2014-07-18T11:58:14.353 に答える
5

adbを使用できる場合は、777の権限を持つディレクトリ/ data / local/binを準備できます。

または、プライベートアプリディレクトリ(/data/data/your.package.unique.name/files)にファイルを作成し、ファイルのアクセス許可を777755に設定することもできます

于 2012-12-03T23:25:37.720 に答える
1

デバイスのルート化を避けたい場合は、基本的にSDカードが世界で書き込み可能であると想定できる唯一の場所です


編集:2014/2015年現在のAndroidフレームワークの最近の変更に注意してください!。

インストール可能なAPKのバイナリ部分を作成し、APKからこのバイナリをプライベートストレージに抽出し、世界中で実行可能にするなどして、バイナリの場所をアナウンスすることをお勧めしますが、一般的に、OSのバージョンとベンダーによってはいくつかの問題が予想されます

于 2012-12-03T23:30:17.540 に答える