jni経由でlibusbを使用するアプリケーションを開発しています。このアプリケーションは現在、ルート化された USB ホストの Android 3 以降のマシンのみを対象としています。
シナリオは次のとおりです。
<java Activity>
loads <jni_wrapper.so>
which wraps <my_main_lib.so>
that uses <libusb.so>
that needs rw access to: /dev/bus/usb/<device>
すべての .so ネイティブ ライブラリは、/system/lib に (ルートとして) インストールするインフラストラクチャの一部であり、単純なユーザーが実行する Java アクティビティで使用できます。
つまり、USB 通信全体をネイティブ側から行う必要があります。
USB パーミッション: /dev/bus/usb/ エントリのデフォルトのパーミッションは (0660, uid= root, gid= usb) です。
明らかに、ネイティブ コードを実行する標準の Java プロセスは上記の要件のいずれも満たしていないため、対応する /dev エントリを "chmod 666" して、これを機能させる必要があります。
ただし、このソリューションはあまり良くありません。再起動、またはデバイスの取り外し/再接続に耐えられないためです (権限は 0660 に戻ります)。
私が探しているソリューションは、次のことを行う必要があります。
- 再起動/再接続に耐える
- root によって ~1 回 ~ インストールされ、アクセス許可を取得するたびにユーザーを煩わせる必要はありません
- 汎用的であり、すべての (/ほとんどの) android 3+ マシンで実行されます
- [必須ではありません] 必要最小限の認証情報を提供します
私が考えた方向:
- /init.rc または /ueventd.rc の権限を変更する --> 再起動するたびに両方とも上書きされる
- usbfs /proc/bus/usb を devmode=0666 でマウント --> 再プラグしても存続しますが、再起動はしません
- 私のプロセスを「usb」グループに参加させますか? --> android.permission.ACCESS_USB を試しましたが、動作/サポートしていません... :/
何か案は?:-)
ありがとう!