Dzisiaj znowu o telefonie firmy Jolla i ich systemie Sailfish OS. Wiele osób się mnie to pytało - co to i po co? Nie wiem czy ten artykuł rozwieje te wątpliwości, ale trochę wyjaśni jeśli dodam, że hackowalność telefonu ma dla mnie duże znaczenie :-). W wypadku tego telefonu jest to też hackowalność fizyczna... Ale o tym innym razem. Teraz wróćmy do Androida, czyli systemu, który jest zainstalowany na Jollce.
Tytułem wstępu wyjaśniam dla niezorientowanych - Android oraz Sailfish. Na telefonie Jolla zainstalowane są oba systemy. Podstawowym jest Sailfish, ale - głównie ze względu na niewielką liczbę aplikacji - czasem używa się Android. Przejścia są jednak bardzo płynne - można np. otworzyć aplikację do maili z Androida. Podobnie linki z Android domyślnie otwierane są przeglądarce na Sailfishu. Można także łatwo przełączać się między Androidem i aplikacjami z Sailfisha. Z punktu widzenia użytkownika jest to praktycznie przeźroczyste. Jedynie przycisk wstecz zdradza, że jest się na Androidzie.
Zaznaczam, że poniższy artykuł raczej nie jest do przeczytania na raz. To bardziej taka ściąga z przydatnych poleceń i rozwiązań. Jest to zresztą kopia mojej ściągi, którą trzymałem w Evernote.
/opt/alien/system
- główne pliki systemu./opt/alien/system/app
- aplikacje systemowe./opt/alien/system/fonts
- pre-instalowane fonty (pliki TTF)./data/app
- aplikacje zainstalowane przez użytkownika./data/sdcard
- wirtualna karta SD dla aplikacji Androida. Coś w rodzaju domowego folderu.W kwestii łączenia z telefonem przez PuTTy lub WinSCP odsyłam do artykułu Krogulca. Poniższe polecenia można wykonać zarówno przez Terminal dostępny w telefonie, jak i zdalnie przez PuTTy (czyli przez SSH).
Składnia:
apkd-launcher /ścieżka/do/pliku.apk id.aplikacji/pełna.nazwa.Aktywności
W związku z tym, że pełna nazwa aktywności (widoku) zwykle ma identyczny początek jak id aplikacji, to można użyć krótszej formy:
apkd-launcher /ścieżka/do/pliku.apk id.aplikacji/.Aktywność
Przykład dla Firefoksa (wersja pełna i skrócona):
# pełna nazwa apkd-launcher /data/app/org.mozilla.firefox.apk org.mozilla.firefox/org.mozilla.firefox.App # w skrócie apkd-launcher /data/app/org.mozilla.firefox.apk org.mozilla.firefox/.App
Nazwy identyfikatorów aplikacji czasem trudno wymyślić (Dolphin ma mobi.mgeek.TunnyBrowser
). Dla aplikacji dostępnych w Google Play wystarczy jednak spojrzeć na adres URL (przykład).
/opt/alien/system/bin/vmstat
/opt/alien/system/bin/logcat
Jeśli nie wiesz co to jest LogCat - zajrzyj do artykułu o programowaniu w Androidzie.
ADB to program używany do zarządzania aplikacjami na Androidzie. Umożliwia także wykonywanie poleceń (otwierania Androidowego shella) oraz zdalne łączenie i instalowania aplikacji. Dzięki temu można kompilować i otwierać aplikacje bezpośrednio z Netbeansa do Jolli.
Domyślnie jednak ADB jest nieaktywny na Jolli, a w każdym razie nie można go normalnie używać. Procedura aktywacji nie jest specjalnie skomplikowana, ale jak zawsze - jeśli wykonujesz polecenia w terminalu, to możesz trwale uszkodzić urządzenie. Ściślej rzecz biorąc - możesz usunąć plik, bez którego system nie będzie się w stanie uruchomić.
UWAGA! Po odblokowaniu ADB każda osoba w Twojej sieci będzie mogła zainstalować aplikacje na Twoim telefonie! Włącz zaporę sieciową w swojej Jollce!
Dodaj poniższe do /opt/alien/system/build.prop
(jako root, najlepiej przez WinSCP):
persist.service.adb.enable=1 service.adb.tcp.port=5555
Wykonaj polecenia:
systemctl restart aliendalvik.service
/opt/alien/system/bin/adb kill-server
Zrestartować możesz np. z terminala (polecenie reboot
).
Po restarcie Jollki możesz normalnie uruchamiać polecenia ADB. Więcej informacji o ADB znajdziesz na stronie Google. Wydaje mi się, że wszystkie powinny działać.
/opt/alien/system/bin/adb devices
/opt/alien/system/bin/adb -e shell
Dla programistów ciekawą sprawą na pewno będzie możliwość testowania aplikacji przez Netbeansa (albo Eclipse jeśli wolisz). Zazwyczaj wymagane jest do tego połączenie przez USB, ale w tym wypadku nie jest to problem.
Na swoim PC wystarczy, że uruchomisz coś takiego:
"c:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe" connect 192.168.1.123
gdzie 192.168.1.123
to adres IP twojej Jolli. Ten adres jest widoczny np. w ustawieniach trybu dewelopera.
Jak wspominałem połączenie między Androidem i Sailfishem jest dosyć płynne. Jedną z możliwości jest powiązanie typów plików (MIME) z określonym poleceniem. W tym wypadku jest jednak pewien haczyk - póki co, żeby uruchomić aplikację z parametrem, musisz włączyć ADB (patrz wyżej).
/usr/share/applications
.sailfish-browser.desktop
.otwieracz-ulubionej-przegladarki.desktop
. Nazwa nie musi być identyczna ;-).MimeType
z pliku "sailfish-browser.desktop" do "otwieracz-ulubionej-przegladarki.desktop".MimeType
w pliku "sailfish-browser.desktop".update-desktop-database
.Plik swój plik "desktop" możesz uzyskać kopiując jeden z istniejących plików. Najważniejsza jest opcja Exec
oraz dodanie opcji NoDisplay=true
. To drugie spowoduje, że nasz plik desktop nie będzie widoczny na pulpicie.
W wypadku plikacji z Androida Exec
powinien mieć formę Exec=/opt/alien/system/bin/adb
-e shell
am start
-a android.intent.action.VIEW
-n id.aplikacji/.Aktywność
-d ' %U'
. Pamiętaj o dodaniu spacji przed "%U". Bez tego polecenie nie zadziała.
Zamiast "otwieracz-ulubionej-przegladarki.desktop" możesz oczywiście wpisać coś innego ;-). Poniżej przykładowe (działające) wersje plików desktop dla przeglądarek Dolphin i Firefox. Rzecz jasna tylko jedna może być domyślna.
otwieracz-delfinka.desktop
[Desktop Entry] Exec=/opt/alien/system/bin/adb -e shell am start -a android.intent.action.VIEW -n mobi.mgeek.TunnyBrowser/.BrowserActivity -d ' %U' Name=Dolphin HTTP handler (opener) Type=Application MimeType=text/html;x-maemo-urischeme/http;x-maemo-urischeme/https; X-Nemo-Application-Type=no-invoker X-Nemo-Single-Instance=no X-apkd-apkfile=/data/app/mobi.mgeek.tunnybrowser.apk NoDisplay=true
otwieracz-foksa.desktop
[Desktop Entry] Exec=/opt/alien/system/bin/adb -e shell am start -a android.intent.action.VIEW -n org.mozilla.firefox/.App -d ' %U' Name=Firefox HTTP handler (opener) Type=Application MimeType=text/html;x-maemo-urischeme/http;x-maemo-urischeme/https; X-Nemo-Application-Type=no-invoker X-Nemo-Single-Instance=no X-apkd-apkfile=/data/app/org.mozilla.firefox.apk NoDisplay=true
Domyślnie aplikacje można instalować ze sklepu Yandex oraz Jolli. W sklepie Yandex jest ich bardzo dużo, w sklepie Jolli parę na krzyż.
Niektóre aplikacje zależą jedna od drugiej - np."YouTube Downloader" wykorzystuje aplikację YouTube (chociaż akurat tej pierwszej nie polecam :-).
Aktualizacja aplikacji instalowanych ręcznie nie działa (przynajmniej na razie). Można co prawda usunąć i ponownie dodać aplikację, ale to może spowodować utratę danych (jeśli są zapisywane na urządzeniu).
Istnieje jednak sposób na obejście problemu:
/usr/share/applications
.apkd-mime-handler.desktop
.Exec
.Exec=/opt/alien/system/bin/adb install -r %F
.Cały plik po zmianach powinien wyglądać tak:
[Desktop Entry] Type=Application Name=Install APK files #Exec=/usr/bin/apkd-install %F Exec=/opt/alien/system/bin/adb install -r %F MimeType=application/vnd.android.package-archive; NoDisplay=true
Zaznaczam jednak, że to działa trochę dziwnie... Przy pierwszym kliknięciu na APK w okienku transferów nie pokazuje się nic (jeśli się przejdzie do listy aplikacji, to widać jednie, że znika ikonka apki). Po drugim kliknięciu apka zostanie ponownie zainstalowana, a dane użytkownika (Twoje dane), powinny pozostać nietknięte. Tak przynajmniej wynika z moich testów. Innych efektów na razie nie zauważyłem.
Rzecz jasna zamiast nadpisywać zachowanie systemu można także wykonać poniższe polecenie w terminalu (może być jako użytkownik "nemo"):
/opt/alien/system/bin/adb install -r /ścieżka/do/twojej/zaktualizowanej/aplikacji.apk