Nieoficjalne debugowanie na Androidzie

2010-12-22 22:00

System Android, jak powszechnie wiadomo, jest licencjonowany kategorią open source, więc istnieje możliwość w miarę łatwego umieszczenia go na urządzeniach mobilnych bez konieczności współpracy z Google. Wykorzystują to producenci różnego rodzaju mniej lub bardziej “nieoficjalnego” sprzętu, działającego pod kontrolą tego systemu. Mogą to być produkty, które trudno klasyfikować inaczej niż jako tanie imitacje, ale także sprzęt produkowany przez (u)znane firmy – jak choćby tablet stworzony przez Creative. Ich wspólną cechą jest domyślny brak wsparcia przez narzędzia wspomagające pisanie aplikacji dostępne w ramach SDK Androida – przede wszystkim Android Debug Bridge (adb), czyli usługę umożliwiającą między innymi debugowanie aplikacji bezpośrednio na urządzeniu. Dla zwykłego użytkownika to oczywiście żadna wada, ale co mają zrobić biedni programiści?…
Okazuje się jednak, że przeszkodę tę da się pokonać. Dzisiaj udała mi się ta sztuka ze wspomnianym tabletem Creative’a i dlatego czuję się upoważniony podzielić się swoim rozwiązaniem :) Wydaje się ono przy tym na tyle ogólne, że powinno stosować do dowolnego urządzenia.

Żeby z niego skorzystać, powinniśmy wpierw wiedzieć co nieco o tym, jak system operacyjny identyfikuje sprzęt podłączony do portu USB. Identyfikator jest 32-bitowy, z czego pierwsze dwa bajty to oznaczenie producenta (Vendor ID lub w skrócie VID), zaś pozostałe to symbol produktu (Product ID lub PID). Listę identyfikatorów urządzeń aktualnie podłączonych do komputera możemy uzyskać na Linuksie poleceniem lsusb, otrzymując rezultaty podobne do poniższego:

  1. Bus 005 Device 002: ID 046d:c526 Logitech, Inc. Nano Receiver

W Windows należy doklikać się do zakładki Szczegóły w oknie właściwości wybranego urządzenia i wybrać pozycję Identyfikatory sprzętu, po czym będziemy mogli znaleźć coś w tym stylu:

  1. USB\VID_045E&PID_0736

Stąd możemy odczytać VID i PID dla naszego urządzenia. Vendor ID zapewne nie jest jednym z tych, które występują w tabelce producentów obsługiwanych przez adb i to jest właśnie główny problem, który stoi na przeszkodzie wykorzystaniu urządzenia do pisania programów.

Jest on jednak łatwy do rozwiązania niezależnie od systemu operacyjnego, którego używamy. Sposób polega po prostu na dopisaniu naszego VID-a do odpowiedniej listy. Znajduje się ona w pliku ~/.android/adb_usb.ini (gdzie tylda to nasz katalog domowy), do którego powinniśmy dodać linijkę z żądanym identyfikatorem w formacie C, tj. z 0x na początku.
I to wystarcza… pod jednym warunkiem: że nasze urządzenie jest odpowiednio widziane przez system operacyjny. Ta część jest już specyficzna dla używanej platformy, ale polega dokładnie na tym samym, co przygotowanie “oficjalnego” urządzenia do współpracy. Mówiąc w skrócie: na Mac OS X nie trzeba robić nic, zaś Linux wymaga dopisania odpowiednio magicznej linijki do równie czarodziejskiego pliku konfiguracyjnego :)

Żarty kończą się na Windows, dla którego konieczny jest specjalny sterownik. Prawdopodobnie (i na szczęście) nie oznacza to jednak konieczności jego samodzielnego napisania, gdyż ten oficjalny powinien nadawać się zupełnie dobrze. Jedyny kłopot to przekonanie systemu, aby użył go wobec naszego sprzętu. W tym celu powinniśmy przyjrzeć się plikowi instalacyjnemu sterownika o nazwie android_winusb.inf. Tam powinniśmy zauważyć części odpowiedzialne za obsługę niektórych z oficjalnych urządzeń, np.:

  1. ;Google NexusOne
  2. %SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_0D02
  3. %CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_0D02&MI_01

Otóż nic nie stoi na przeszkodzie, aby skopiować którąś z nich, a następnie dokonać modyfikacji fragmentów zawierających VID i PID w taki sposób, aby całość wskazywała na nasze urządzenie. Instalacja sterownika z tak preparowanego pliku .inf będzie wymagała zignorowania ostrzeżenia odnośnie podpisu cyfrowego, lecz poza tym powinno obejść się bez problemów.

Jeżeli wszystko poszło dobrze, to po restarcie serwisu adb i wyliczeniu podłączonych urządzeń:

  1. adb kill-server
  2. adb devices

powinniśmy odnaleźć nasz sprzęt, co będzie także oznaczało, że da się na nim debugować programy z poziomu IDE.

Tags: , , , , ,
Author: Xion, posted under Programming »



Adding comments is disabled.

Comments are disabled.
 


© 2017 Karol Kuczmarski "Xion". Layout by Urszulka. Powered by WordPress with QuickLaTeX.com.