6

USBデバイスに接続する必要があるAndroidアプリケーションを開発しています。

私はWindowsで同様のアプリケーションを開発し、cで書かれたドライバーを持っています。

Androidアプリケーション用のUSBドライバーを開発したいと思います。Android用のUSBドライバーを開発するために何が必要か知りたいです。

また

ndkを使用してcで記述されたコードを再利用できますか?

ありがとう、

4

2 に答える 2

9

まず、Android は実際には単なる Linux であるため、「Android アプリケーション用の USB ドライバーを作成する」ことについて話している場合は、「特定のデバイス用の Linux USB ドライバーを作成する」と言うべきです。

次に、何らかの方法でデバイスにアクセスする必要があります。Linux 用の USB ドライバーを作成したときに得られるものは、おそらく /dev/ 内のファイル ノードです。Android が適切な Java API を提供していない非標準の USB デバイス (マウス/ジョイスティック/大容量ストレージなど) 用のドライバーを作成したいと思いますか? その場合、ネイティブ ライブラリを作成し (おそらく既に持っている C コードに基づいて)、NDK でコンパイルする必要があります。そこから取得する .so ファイルは、Android アプリケーションにパッケージ化することができ、それを使用して USB デバイスと通信できます。

要約すると:

usb デバイス ドライバー -> カーネル モジュールを作成するか、Linux カーネルにドライバーを埋め込みます。これは、Linux の USB ドライバー プログラミングに関するもので、Web で十分なガイドを見つけることができるはずです。Windows USB ドライバーを実際に作成した場合は、C コードの一部を再利用できるはずです。

デバイスにアクセスするためのネイティブ ラッパー ライブラリ (Windows 用語に慣れている場合は .so ファイル、または .dll) -> 適切なデバイス ノードを開き、デバイスから正しく読み書きする NDK プロジェクトを作成します。

Android アプリ -> .so ファイルをインクルードし、jni を介してそのネイティブ (c) メソッドにアクセスします。javah や swig などのツールを使用して、ライブラリのヘッダー ファイルから jni コードを生成できる場合があります。

于 2012-10-05T07:34:49.253 に答える
5

前の回答は、デバイスへのルートアクセス権があり、大量展開には適していないことを前提としています。apiバージョン12以降、androidは、低レベルの制御チャネルとusb要求バッファーを使用して特定のデバイスと対話できるusbインターフェースを提供しています。

サポートされているデバイスには2つのタイプがありますusbホストデバイスusb(android)アクセサリデバイス

ホストモードは通常、タブレットでのみ適切にサポートされ、受話器はそれをサポートできますが、ホストモードを維持する能力は低く、質問のデバイスの電圧要求に大きく依存します。

アクセサリモードは、USB標準を拡張して、アクセサリを「Android」アクセサリとして識別する追加の交換を追加するため、奇妙です。

上記のモードを使用できる場合は、インストール先のすべてのデバイスを完全に制御できない限り、低レベルのcドライバーを使用するよりもはるかに優れたオプションです。

これらは両方ともJavaAPIであり、GoogleAndroidドキュメントサイトのusbに記載されています。

于 2012-10-07T23:48:48.763 に答える