3

私は NDK を使用して libusb をコンパイルしています (両方ともhttps://github.com/monaka/libusb-androidで提供されているビルド済みのものから)) だけでなく、彼の変更を使用して最新の利用可能な (libusb-1.0.8) をコンパイルします。ロードされているように見え、「init()」への最初の呼び出しはエラーを返しません。ただし、デバイスを一覧表示するためにライブラリに基本的な呼び出しを行おうとすると (libusb に含まれているサンプル lsusb コードから)、クラッシュが発生します。NDK が提供する「arm-eabi-addr2line」と、ダンプが障害として提供するアドレスを使用して、libusb のデバイス リスト メソッドが検出したデバイスから「不明なステータス」を取得することを突き止めました。クラッシュが発生する「usbi_log()」メソッドが呼び出されます。NDK ツールでは行番号が表示されないため、エラーが発生している場所の詳細はこれだけです。

libusb ソース リポジトリ: http://git.libusb.org/?p=libusb.git;a=summary;js=1

これが問題の一部であると考える理由はありませんが、非常に単純なアクションから libusb への単純な JNI 呼び出しを行っています。これは非常に基本的な .h (javah から) ファイルと .c ファイルであり、提供されている「lsubs」サンプル プログラムのアクションをコピーし、Action クラスは onLoad() メソッドで呼び出しを行うだけです。

また、エミュレーターで実行するとクラッシュします。また、デバイス (Nexus One) を取り外してデバッグを無効にし ([アプリケーション] -> [デバイスの開発] で無効にする)、USB バスを (理論的には) 空にする (少なくとも外部物理デバイスの) と、同じクラッシュが発生します。

デバイスとエミュレーター Android バージョン: 2.2
NDK バージョン: r5b
ADK バージョン: r10
ホスト OS: OSX

あなたが提供できる助けをありがとう!

4

1 に答える 1

0

電話にsshデーモンをインストールすると、ポート転送を使用してsshデーモンに接続し、gdbserverを実行して、PCのgdbからそれに接続できます。

Java アプリに接続する前に、最初にコマンド ライン実行可能テストをビルドすることをお勧めします。

于 2011-05-01T05:01:31.173 に答える