RkBlog

Hardware, programming and astronomy tutorials and reviews.

Python for Android oraz QPython, czyli węże na Androidzie

Jakie możliwości oferują nam środowiska do skryptowania Androida wykorzystujące Pythona?

Na potrzeby skryptowania Androida i prototypowania aplikacji bezpośrednio na urządzeniu stworzono Scripting Languages For Android, w skrócie SL4A. W ramach projektu wśród języków skryptowych znalazł się Python.

Zobaczmy więc jakie możliwości daje Python na Androidzie, czyli Py4A i jakie funkcjonalności systemu są dla niego dostępne.

Jak to jest zrobione?

Platforma języków skryptowych dla Androida jest zaimplementować w dość specyficzny sposób. Funkcjonalności Androida, jak np. wysłanie SMS są owinięte w proste metody. Te metody grupuje się w fasady. Następnie serwer JSON-RPC wystawia te metody zainteresowanym językom skryptowym. Łatwo wywoływać różnorakie akcje, lecz ze względu na taką komunikacje nie możemy skryptować klasycznych interfejsów dotykowych (choć dostęp do rysowania interfejsów i obsługi zdarzeń jak np. kliknięcie jest).

W przypadku Pythona mamy już do wyboru Pythona 2 jak i 3. Dostępna jest większość biblioteki standardowej. Można też instalować niektóre pakiety z pypi. Jak ktoś tęskni za Django to można go uruchomić nawet na smartphonie z wykorzystaniem Py4A.

W sieci dostępnych jest trochę tutoriali jak i przykładów, a platforma wydaje się aktywnie rozwijać. SL4A jak i Py4A zostały opisane w kilku książkach, fragmenty można pobrać ze strony SL4.

Jeżeli chodzi o aplikację z Pythonem to obecnie mamy dwie. SL4A wraz z Py4A, które pobieramy z code.google.com i instalujemy APK. Druga opcja to QPython, którego instalujemy ze sklepu Google Play. QPython wykorzystuje osiągnięcia SL4A jak i dodaje dużo od siebie - ładna strona z ciekawymi informacjami, jak i dodatkowe funkcjonalności samej aplikacji (np. lepszy edytor, interaktywna konsola i różne dodatki, integracja z Kivy). Kod pisany dla Py4A będzie (powinien) działać pod QPython. Inna może być ścieżka importu.

Py4A

Żeby zainstalować Py4A na urządzeniu z Androidem wystarczy pobrać APK z repozytorium SL4A i następnie Py4A. Po instalacji obu wchodzimy do aplikacji Py4A i klikamy Install co ściągnie i zaktualizuje interpreter i dodatki. Gdy to zostanie zrobione możemy przejść do aplikacji SL4A i tam odpalić przykładowe skrypty, czy zabrać się za pisanie własnych. Jeżeli chcesz pisać kod na PC/laptopie i odpalać go z poziomu urządzenia to pomocny może być serwer SSH, czy np. serwer FTP.

Instalacja SL4A
Instalacja Py4A
Instalacja składników Pythona w aplikacji Py4A

Można też skorzystać z dobrodziejstw narzędzi deweloperskich androida i użyć np adb by kopiować pliki. Można też wykorzystując serwer SL4A pisać kod na komputerze, który będzie komunikował się z urządzeniem po sieci i działał tak jakby został odpalony na samym urządzeniu. Więcej o tym na wiki android-scripting. Można zobaczyć to też w akcji na youtube.

Wspominałem o metodach i fasadach. Wykaz owych metod też znajdziemy na wiki android-scripting. Nie tak dawno pojawiła się też ładna dokumentacja. Do dyspozycji dostajemy fasady dotyczące baterii, komunikacji Bluetooth, kamery (aparatu fotograficznego), kontaktów, multimediów, telefonu (SMS i połączenia telefoniczne), sensorów, połączeń wifi, czy interfejsów. Do tego możemy instalować inne biblioteki do Pythona, o ile np. nie wymagają kompilacji (wtedy trzeba by je skompilować skrośnie - o ile dany pakiet da się skompilować i będzie miał wszystkie zależności spełnione). Brak niektórych modułów z biblioteki standardowej też może sprawiać problemy. Kolejnym problemem dla np. pyusb czy pyserial może być brak uprawnień aplikacji SL4A do dostępu do np. urządzeń USB (o ile nie uda się aplikacji o nie zapytać).

QPython

Ten projekt-aplikacja skupia się wyłącznie na Pythonie. wykorzystuje SL4A z kilkoma nowościami, czy zmianami jak i oprócz tego dostarcza ładniejszą aplikację z poręcznymi narzędziami jak interaktywny interpreter, czy ładniejszy edytor kodu. Nie wszystko co przewidziane zostało dla Py4A działać będzie z QPythonem (np. zdalne skryptowanie dzięki serwerowi SL4A).

Jeżeli szukasz pomocy lub maszy pytania to QPython ma swoje forum w postaci qpython.org/questions/. Dostępne jest też dość chude wiki.

Zestaw aplikacji QPython
Demo Kivy w QPython

Z punktu widzenia kodu wykorzystującego fasady obie platformy inaczej nazywają moduł fasad:

try:
    import androidhelper as android
except ImportError:
    import android

Witaj świecie

Możesz przeglądać kod skryptów dostarczonych razem z np. Py4A. Większość jest dość krótka. Oto prosty przykład:

import android

droid = android.Android()
droid.ttsSpeak("This is sparta. To jest sparta.")
droid.makeToast("This is sparta. To jest sparta.")

ttsSpeak to zamiana tekstu na mowę, a makeToast wyświetli pływającą notyfikację-tekst. Jeżeli popatrzyć na listę faset to obie metody są tam opisane. Tak wygląda, w pewnym uproszczeniu wykorzystanie metod SL4A w Pythonie - tworzymy obiekt android.Android i wywołujemy na nim metody z faset.

RkBlog

3 November 2014;

Comment article