pierwsze, Android jest właściwie tylko Linux, więc jeśli mówimy o „pisanie sterownika USB dla mojego Android aplikacji” należy raczej powiedzieć „pisanie Linux Driver USB dla konkretnego urządzenia.”
Następnie musisz w jakiś sposób uzyskać dostęp do urządzenia. To, co otrzymasz po napisaniu sterownika USB dla Linux-a, to prawdopodobnie jakiś węzeł plików w/dev /. Zgaduję, że chcesz stworzyć sterownik dla niestandardowego urządzenia USB (takiego jak mysz/joystick/pamięć masowa), dla którego Android nie zapewnia dobrego interfejsu API JAVA? W takim przypadku będziesz musiał napisać natywną bibliotekę (prawdopodobnie w oparciu o kod c, który już masz) i skompilować ją z NDK. Plik .so, który się z niego wydostanie, może być spakowany w twojej aplikacji Android, która może następnie użyć jej do rozmowy z twoim urządzeniem USB.
Więc Podsumowując: sterownik
USB -> utworzyć moduł jądra lub osadzić sterownik w jądrze Linux: to jest linux usb programowanie sterownika rzeczy, dla których powinieneś być w stanie znaleźć wystarczająco dużo przewodników w Internecie. Powinieneś być w stanie ponownie użyć części twojego kodu c, jeśli naprawdę stworzyłeś sterownik USB systemu Windows.
natywna biblioteka otoki, aby uzyskać dostęp do urządzenia (plik .so lub .dll, jeśli używasz terminologii Windows) -> utwórz projekt NDK, który otwiera odpowiedni węzeł urządzenia i poprawnie odczytuje/zapisuje na twoim urządzeniu.
Aplikacja na Androida -> dołącz plik .so i uzyskaj dostęp do jego natywnych (c) metod przez jni. Możesz użyć narzędzi takich jak javah lub swig do wygenerowania kodu jni z plików nagłówkowych biblioteki.
Czy aplikacje NDK wymagają uprawnień administratora? –
Nie, nie. Kod macierzysty można zbudować opracowany i wdrożony bez uprawnień administratora, ale dostęp do zasobów należących do systemu, takich jak urządzenia, będzie wymagał uprawnień administratora. Przykładem innym niż USB byłoby użycie standardowego sshd linuksa, takiego jak dropbear, jest to prawdopodobne, że możesz je znaleźć w sklepie Play, jednak aby działać na standardowych portach, muszą być uruchamiane jako root. – Neil