Java w Nokii N9
13.06.2013 01:46
Od całkiem niedawna, dzięki @Krogulcowi, stałem się bardzo szczęśliwym posiadaczem Nokii N9. Smartfon jest po prostu rewelacyjny, ale (zdaję sobie z tego sprawę) że nie dla wszystkich. Nie będę tu teraz wyliczał wad i zalet tego telefonu, ale jeśli nie lubicie braku wsparcia dla swojego telefonu ze strony różnych instytucji, usługodawców, to zapewne telefon Nokia N9 z systemem MeeGo nie jest przeznaczony dla Was, gdyż system ten jest bardzo unikatowy i praktycznie pomijany przez różnych developerów. Na szczęście zaletą w tej "wadzie" (braku popularności) jest otwartość systemu MeeGo, co sprawia że telefon, pomimo braku wsparcia producenta i jego małej powszechności, dzięki społeczności i kilku zapaleńców jest wciąż w miarę konkurencyjny: aplikacje są tworzone, udoskonalane, problemy rozwiązywane, a wszystko jest dokumentowane w sieci przez użytkowników (patrz @Krogulec !) - no, cały czas się coś dzieje. Dziś chciałem opisać, jak poradziłem sobie z instalacją aplikacji do banku, który nie przewidział, że posiadacz konta może mieć telefon z systemem MeeGo ;)
Nie dla mnie Android...
Posiadacze Nokii N9 mniej więcej kojarzą, jakie są możliwości tego telefonu i wcale nie dziwi ich, że ktoś odpalił na nim popularnego Androida, czy jakże rozbudowanego Debiana. Ale, nie chodzi mi o to, żeby uruchomić popularny system, pod którego na 90% znajdę aplikację z mojego banku - po to kupiłem N9kę, żeby używać MeeGo, a ten kto używał, to wie o czym mówię i zapewne uwierzy mi, że ciężko jest się przesiąść, czy nawet powrócić do jakże popularnego Androida.
niepopularne != niedobre
MeeGo do smartfona to strzał w dychę - system idealnie skrojony pod telefon. Niestety mało kto (nikt?) liczy się z faktem, że ktoś może chcieć używać telefonu z tak mało popularnym systemem, że tak mało popularny telefon może być tak pożądany. No i... bank PKO BP wśród mnogości modeli telefonów przy wyborze do instalacji swojej autoryzacyjnej aplikacji, w tym wielu Nokii, pominął oczywiście model N9 :) Mowa o aplikacji Token iPKO, która pomaga zweryfikować, że my to my i po dokonaniu autoryzacji puszcza transakcję dalej. Cała operacja przeprowadzenia transakcji niewiele różni się od tych znanych ze zdrapką czy sms'em. Różnica jest taka, że musimy mieć pod ręką telefon z połączeniem internetowym, na którym uruchomiona aplikacja po wpisaniu kodu pin generuje nam token, który z kolei upoważnia nas do przeprowadzenia transakcji w banku, np. wykonania przelewu "przez internet". Kłopot w tym, że nie ma tej aplikacji dla Nokii N9...
oszukać przeznaczenie cz.1
Pomyślałem sobie, że mimo wszystko, najbardziej dorżniętą wersją aplikacji będzie jednak ta na najbardziej popularną platformę - Androida. Nie mam zamiaru wgrywać Androida obok mojego MeeGo dla jednej aplikacji. Postanowiłem skorzystać tutaj z programu Apkenv, który pod systemem MeeGo potrafi odpalić aplikację przeznaczoną właśnie pod Androida. Poradziłem sobie również z wyodrębnieniem ze sklepu googlowego Play samej aplikacji od PKO pod postacią instalki apk. Przeniosłem instalkę na Nokię, i próbowałem zainstalować zgodnie z instrukcjami @Krogulca. Niestety, apkenv nie gwarantuje 100% zgodności z systemem Android i całe przedsięwzięcie spłonęło na panewce - instalacja zakończona niepowodzeniem. Zrezygnowałem więc z pomysłu wykorzystania tutaj dobrodziejstw i zasobów najpopularniejszego systemu na smartfony.
oszukać przeznaczenie cz.2
Mimo porażki związanej z wykorzystaniem aplikacji dla Androida nie poddałem się. Tak sobie chodziłem po menu z modelami telefonów, na jakich jest możliwość instalacji bankowej aplikacji i natrafiłem na moją starą Avilę. Zaraz, zaraz - jeśli Samsung Avila, to aplikacja tylko w javie - to może tędy droga, pomyślałem. Jak się okazało, pomysł okazał się trafny i wszystko zadziałało, ale po kolei...
jaką javkę wybrać?
Ja niezastanawiałem się zbyt długo i jako zwolennik wolnego oprogramowania celowałem od razu w icedtea. Niestety, albo słabo szukałem, albo nie ma gotowej paczki icedtea w sieci dla Nokii N9. Instalacja tej pod N900 zakończyła się, w moim przypadku, niepowodzeniem. Jako że nie jestem aż tak biegły i zbyt leniwy, to nie przystąpiłem do kompilacji. Pozostało mi więc skorzystać z javy od Oracle'a. Cóż... logowanie, sprzedanie swoich danych kolejnej wielkiej korporacji, samo życie, zgoda i akceptacja warunków licencji, i takie tam przyjemności nie ominą nas, gdy chcemy skorzystać z javy od giganta. Pobrałem Javę Embedded ARMv7 Linux - Headful EABI, VFP, SoftFP ABI, Little Endi....
Chwilowe zaćmienie - bynajmniej nie słońca ;)
Pobrałem paczuszkę z javą od Oracle'a, rozpakowałem ją za pomocą menadżera plików FileBox i... no, nie mogę tego uruchomić, co jest? Spędziłem sporo czasu i przewertowałem kilka stron w google, zanim dopatrzyłem się swojego błędu. Próbowałem uruchomić program, który rozpakowałem do podfolderu katalogu domowego - błąd. Oczywiście binarka nie miała praw do uruchomienia się. Każdorazowa próba nadania uprawnień (chmod x java, cmod 777 java) kończyła się mniej więcej takim komunikatem: "operation not permited" - dlaczego? odpowiedź jest prosta: wygląda na to, że cały katalog /home jest jakby na innej partycji, która jest traktowana jak partycja wymiany, coś a'la pendrive, na której mamy system plików vfat - zapewne chodzi o zgodność z systemami z Redmond, aby nokia podpięta do USB na Windzie pokazała zgromadzone zdjęcia i inne pliczki. Jak wiadomo, nadanie uprawnień plikowi na takiej partycji jest niemożliwe, więc co robić? No przecież instalowane programy jakoś się uruchamiają. Wyszedłem więc z katalogu /home i przerzuciłem javę do katalogu /opt/java - tu wszystko poszło gładko: uprawnienia nadane, java uruchamia się. Mały sukces ;) java znajduje się w katalogu /opt/java/ejre1.7.0_21
java to nie wszystko
Do uruchomienia programu napisanego w javie (.jar, .jad) na Nokii N9, będziemy potrzebować także Microemulatora. Pobieramy go i rozpakowujemy do naszego katalogu /opt/java. W konsekwencji program ląduje w katalogu /opt/java/microemulator-3.0.0-SNAPSHOT. Ok. Żeby można było z microemulatora skorzystać po ludzku na naszej Nokii N9, będziemy potrzebować skórkę, dzięki której korzystanie z aplikacji będzie o niebo przyjemniejsze. Fajną, funkcjonalną skórkę do microemulatora pod N9 można pobrać stąd. Oczywiście rozpakowujemy ją do naszego katalogu /opt/java. Teraz można powiedzieć, że mamy już prawie wszystko. Teraz pozostało nam pobrać aplikację z banku i sprawdzić, czy zadziała.
małe oszustwo
Nadeszła pora na główny składnik. Pobieramy aplikację Token iPKO dla telefonu Samsung Avila. Tak jak się spodziewałem, aplikacja jest w postaci pliczku jad. Jednym słowem, zamiast cytryny do herbaty dodajemy kiszoną kapustę - ta też jest kwaśna ;) Pobrany pliczek jt.jad z banku wgrywamy do /opt/java/ipko. Jak się później okaże, bank będzie myślał, że używamy telefonu Samsung Avila, ale to jest szczegół - całość funkcjonuje jak należy.
konfigurujemy środowisko uruchomieniowe
Czas w końcu coś odpalić. Na pierwszy strzał uruchomimy microemulatora i skonfigurujemy go, tak aby dało się go znośnie używać. Przechodzimy więc do katalogu z binarką javy (/opt/java/ejre1.7.0_21/bin) i odpalamy:
./java -jar /opt/java/microemulator-3.0.0-SNAPSHOT/microemulator.jar
Po uruchomieniu microemulatora wchodzimy w Optians->Select Device. Dodajemy skórkę poprzez kliknięcie w Add i wybieramy pliczek (microemu-n900-240x320.jar), który rozpakowaliśmy wcześniej do katalogu /opt/java, zaznaczamy jako domyślne. Ok - teraz to jakoś wygląda. Zakańczamy działanie microemulatora.
uruchamiamy Token iPKO
Cały czas będąc w katalogu z binarką javy wykonujemy:
./java -jar /opt/java/microemulator-3.0.0-SNAPSHOT/microemulator.jar /opt/java/ipko/jt.jad
Zostaje uruchomiona aplikacja. Teraz musimy wklepać kod, który otrzymaliśmy SMS'em z banku decydując się na użycie tokena, potem aplikacja każe wprowadzić pin i potwierdzić go. Od tego czasu hasłem do aplikacji jest ten pin. Cała operacja wymaga potwierdzenia, więc zostaje w aplikacji wygenerowany kod, który należy podać na stronie banku przy akceptacji tej metody uwierzytelnienia - takie potwierdzenie. Token zostaje aktywowany.
Teraz wystarczy na stronie banku przejść do narzędzi autoryzacyjnych i wybrać tokeny. Jako aktywny powinniśmy mieć: Aplikacja w telefonie komórkowym Samsung GT‑S5230 Avila :)
Aby zmienić naszą dotychczasową metodę autoryzacji musimy kliknąć Zmień rodzaj narzędzia autoryzacyjnego i teraz.. zaraz, moment... Nie zauważyłem tego wcześniej, ale jest metoda SMS - nawet mój numer komórki się zgadza - wybieram. SMS, to jest to o co mi tak naprawdę chodziło, ale nie zauważyłem wcześniej tej opcji :) Nie ma tego złego, co by na dobre jednak nie wyszło: nauczyłem się odpalać aplikacje jar na Nokii N9...
zadanie domowe
Żeby jednak nie było zbyt kolorowo, (dla tych, co to jeszcze czytają) nie podam na tacy rozwiązania, jak zrobić aby java była "system wide", dostępna z każdego miejsca i każdego programu w komórce - ponoć nawet z firefox'a ;) dla ułatwienia dodam, że jest to jednoliniowe polecenie wykonane z poziomu terminala. To by było na tyle, bye :)