USBホストサポートが組み込まれたSamsung Galaxy SIIと、USBホストが「ハッキング」されたMotorola Droid(オリジナル)があります。SGSIIはAndroid 3.xを実行し、Droidは2.xを実行します。
libusb-compat を Android に移植し (主にクロスコンパイルしただけです)、外部デバイスを接続して使用できるようにしました。ドライバーは Android にも移植されており、私の libusb-compat へのリンクも含まれています。これらすべてに加えて、ドライバーと libusb-compat を使用するための JNI インターフェースを持つアプリケーションがあります。
Android 2.x を実行している Droid では、これらすべてが完全に機能します。移植したドライバーでデバイスを初期化でき、libusb-compat を使用して処理を実行できます。
ただし、3.x を実行している SGSII では、libusb-compat を呼び出して USB デバイスを一覧表示したり、クエリを実行したりすると、すべて失敗します。私のアプリケーション内から実行されている libusb-compat はルート USB バスを見つけることができますが、USB デバイスのリストは常に空になり、それらへのクエリは失敗します。
ここで、libusb-compat にリンクする単純なスタンドアロン実行可能ファイルをコンパイルし、単に USB デバイスを一覧表示してアプリケーションの外部(たとえば、adb シェル) で実行しようとすると、ルート バスとすべてのSGSII 上の USB デバイス。これにより、Android 3.x でアプリケーションが実行されているサンドボックスが、libusb-compat による USB デバイスへのアクセスをブロックしていると思われます。USB ホストをサポートするデバイスで許可の問題が発生する可能性があります。
これをマニフェストに追加しようとしましたが、役に立ちませんでした:
<uses-feature android:name="android.hardware.usb.host" />
私のアプリケーション内で libusb-compat が機能するために、私が間違っている点や追加する必要がある点はありますか? 繰り返しますが、libusb-compat ドライバーを使用する ndk でスタンドアロン アプリケーションをビルドすると機能します。