4

これが私がやりたいことです。アクティビティによって生成されているサードパーティのネイティブ実行可能ファイルがあります。アクティビティとネイティブ実行可能ファイルはTCPを介して通信します。重要なのは、サードパーティアプリケーションがlibusbを使用しているため、rootが必要なことです。そのため、元のlibusbと同じインターフェイスを持ち、代わりにAndroid USBHostAPIを使用するラッパーlibusb-javaを実際に作成できる可能性があると思いました。したがって、実行している実行可能ファイルを変更せずにlibusb-javaにリンクするだけで、Android USBHostAPIを使用できます。問題は、 libusb-javaを書きたい場合です。、ライブラリ内からJVMにアクセスできる必要があります(サードパーティの実行可能ファイルの起動時に動的にロードされます)が、これはJava側でリンクされないため、アクセスする方法がありません。アクティビティにリンクされていないネイティブ実行可能ファイル(おそらくリフレクション)からJavaコードを呼び出す簡単な方法はありますか?何か案は?

例:ネイティブバイナリが* libusb_open()*を呼び出す場合、実際にはlibusb-javaから* libusb_open()*が呼び出され、元の直接ネイティブ実装ではなく、android.hardware.usb.UsbManagerのopenDevice()が呼び出されます。 。(私は単純化しすぎていますが、基本的な考え方です)

4

1 に答える 1

0

簡単な答え:いいえ、ありません。独自のDalvikVMを起動して呼び出すこともできますが、Androidシステムにアクティビティとして存在しないため、多くのプラットフォームサービスを使用することは困難です。

ネイティブコードを再構築して、アクティビティまたはサービスホスティングプロセスとして通常のAndroidの方法でDVMによってロードされるライブラリとして実行することをお勧めします。これは、静的jniサブルーチンからmain()を呼び出すのとほぼ同じくらい簡単な場合もありますが、Androidは古いプロセスで新しいエンティティを開始することが多いため、プロセスレベルの静的データの潜在的な不整合に注意してください。

または、シミュレートされたAPI呼び出しを、TCP、[いくつかのトリックを使用して]バインダー、またはその他のIPCメカニズムを介してプロキシすることもできます。

于 2013-01-02T22:43:19.660 に答える