Frage USB-Treiber für Android schreiben


Ich entwickle eine Android-Anwendung, in der ich eine Verbindung zu einem USB-Gerät herstellen muss.

Ich habe eine ähnliche Anwendung auf Windows entwickelt und ich habe Treiber in c geschrieben.

Ich möchte einen USB-Treiber für meine Android-Anwendung entwickeln. Ich möchte wissen, welche Dinge notwendig sind, um USB-Treiber für Android zu entwickeln.

oder

Kann ich den in c geschriebenen Code mit ndk wiederverwenden?

Vielen Dank,


5
2017-10-05 07:00


Ursprung


Antworten:


Erstens, Android ist eigentlich nur Linux. Wenn Sie also davon sprechen, "einen USB-Treiber für meine Android-Anwendung zu schreiben", sollten Sie lieber "Linux-USB-Treiber für Ihr spezifisches Gerät schreiben" sagen.

Als nächstes müssen Sie auf Ihr Gerät zugreifen. Was Sie bekommen werden, wenn Sie den USB-Treiber für Linux geschrieben haben, ist wahrscheinlich ein Dateiknoten in / dev /. Ich schätze, Sie möchten einen Treiber für ein nicht standardmäßiges USB-Gerät (wie eine Maus / Joystick / Massenspeicher) erstellen, für die Android keine schöne JAVA-API bietet? In diesem Fall müssen Sie eine native Bibliothek schreiben (wahrscheinlich basierend auf dem C-Code, den Sie bereits haben) und mit dem NDK kompilieren. Die .so-Datei, die Sie daraus erhalten, kann in Ihre Android-Anwendung gepackt werden, die sie dann verwenden kann, um mit Ihrem USB-Gerät zu sprechen.

Um es zusammenzufassen:

USB-Gerätetreiber -> Erstellen Sie ein Kernel-Modul oder betten Sie einen Treiber in Ihren Linux-Kernel ein: Das ist Linux-USB-Treiber-Programmierung, für die Sie genügend Anleitungen im Web finden sollten. Sie sollten in der Lage sein, Teile Ihres c-Codes wiederzuverwenden, wenn Sie wirklich einen Windows-USB-Treiber erstellt haben.

native Wrapper-Bibliothek für den Zugriff auf Ihr Gerät (.so-Datei oder .dll, wenn Sie mit der Windows-Terminologie vertraut sind) -> Erstellen Sie ein NDK-Projekt, das den richtigen Geräteknoten öffnet und auf Ihrem Gerät korrekt liest / schreibt.

Android App -> schließen Sie die .so-Datei ein und greifen Sie über jni auf ihre nativen (c) Methoden zu. Sie können möglicherweise Tools wie javah oder swig verwenden, um den jni-Code aus den Headerdateien Ihrer Bibliothek zu generieren.


6
2017-10-05 07:34



In der vorherigen Antwort wird davon ausgegangen, dass Sie über Rootzugriff auf Ihr Gerät verfügen und nicht für die Massenbereitstellung geeignet sind. Seit API Version 12 Android hat eine USB-Schnittstelle zur Verfügung gestellt, mit der Sie mit bestimmten Geräten mit den Low-Level-Steuerkanäle und USB-Anforderungspuffer interagieren können.

Es werden zwei Arten von Geräten unterstützt USB-Host-Geräte USB (Android) Zubehörgeräte

Host-Modus ist in der Regel nur Unterstützung gut auf Tablets, Handys können und unterstützen es, aber ihre Fähigkeit, Host-Modus zu erhalten ist weniger und sehr abhängig von der Spannung Anforderungen der Devic in Fragen

Der Zubehörmodus ist seltsam, da er USB-Standards erweitert, um einen zusätzlichen Austausch hinzuzufügen, der ein Zubehörteil als "androides" Zubehör identifiziert

Wenn die oben genannten Modi für Sie verwendbar sind, dann sind sie bei weitem die bessere Option, einen Low-Level-C-Treiber zu verwenden, es sei denn, Sie haben die vollständige Kontrolle über alle Geräte, auf denen sie installiert werden.

Diese sind beide Java Apis und können auf der Google Android-Dokumentations-Website unter USB gefunden werden.


3
2017-10-07 23:48