niedziela, 23 marca 2014

[Własna Aplikacja na Androida #2] - Stanowisko pracy Eclipse, ADB i "Uszanowanko dla świata".

Gdy w końcu zebrałem się żeby zacząć kurs "po mojemu" o pisaniu Aplikacji na Androida trzeba go kontynuować. A Dodatkową motywacją jest fakt , że wczoraj liczba wyświetleń bloga przekroczyła 10k. Dziękuje!:)
 Dziś główną część Artykułu przeznaczam użytkownikom środowiska Eclipse, z NetBeans'a nie korzystałem nigdy a Android Studio jest chyba sam w sobie skonfigurowany.

Na wstępnie potrzebne na będzie Android SDK Tools , które możemy ściągnąć z :
https://developer.android.com/sdk/index.html?hl=sk

Ściągamy to co jest nam potrzeba (zależy od systemu). ADT Bundle to "Gotowa paczka deweloperska" ,  w której (jak możemy wyżej przeczytać) wchodzi przygotowany Eclipse z wtyczką ADT oraz Pakiet SDK ze gotową wirtualną maszyną androida. Ściagamy , instalujemy/wypakujemy i kodzimy - czyż nie proste?

Jeśli mamy już ściągniętego Eclipse wystarczy ściągnąć Samo SDK,zainstalować.je i skonfigurować.Etapy konfiguracji nie są zbyt trudne i każdy powinien się połapać.
Po instalacji Android SDK uruchamiamy SDK Manager i naszym oczom ukaże się takie oto cudo
SDK Manager to mały programik głównie to ściągania narzędzi (Sterowniki USB do ADB, Update a nawet wirtualne maszyny Androida). Na dzień dobry już musimy ściągnąć kilka rzeczy.
Z Zakładki Tools Ściągamy Android SDK Platform-tools, z Zakładki Extras Google USB Driver no i dodatkowo ściągniemy sobie Androidka. 2.3.3 (API 10). Klikamy Install x Packages (zamiast x jest liczba) w nowym oknie zaznaczamy Accept Licence i Install.
Po instalacji zaczyna się najlepsze!

Konfiguracja ADB
Kiedy chcemy przetestować aplikację na fizycznym urządzeniu musi on obsługiwać ADB. O ile każdy telefon ma w opcjach programistycznych "Debugowanie USB" (Zaznaczone koniecznie być musi!) tak nie każdy komputer to ogarnia. 
Na Windowsie trzeba instalować urządzenie, którego sterowniki ściągnęliśmy przez SDK (Google USB Driver). Wchodzimy zatem 
Wchodzimy w Menadżer urządzeń (Prawym na mój komputer, i po lewo będzie). Następnie klikamy w Akcja i Dodaj Starszy sprzęt. Naszym Oczom ukaże się takie okno 
Dalej, Zainstaluj sprzęt z listy, Dalej do takiego stanu :
Jak widać ja zrobiłem tu co trzeba było. Trzeba kliknąć na guzik "z dysku" i wybrać plik android_winusb.inf z Usb Driver. (Standardowo będzie chciał z Dyskietki zczytać , wystarczy kliknąć przeglądaj i wybrać) który znajduje się w Folderze z Android SDK/extras/google/usb_driver . Potem Dalej, Dalej , gdy zapyta o zaufane certyfikaty to kliknąć tak (TAK GOOGLE JESTEŚ NAJLEPSZY I MAM DO CIEBIE PEŁNE ZAUFANIE - do czasu...) po instalacji u mnie "działa" i mam w menedżerze urządzeń coś takiego. :
Sprawdźmy czy działa. Wejdźmy w folder z Android SDK/platform-tools . tam mamy plik adb
podłączmy telefon z włączonym trybem debugowania do komputera. Przytrzymaj SHIFT i "gdziekolwiek" w tym folderze kliknij prawym przyciskiem myszki i wybierz "Otwórz Okno Polecenia Tutaj". Po wpisaniu adb devices naszym oczom ukarze się napis informujący o starcie serwera Adb a potem Numerki naszego telefonu. DZIAŁA!
Wtyczka ADT w Eclipse 
Ciężko mi będzie pokazać jak ją zainstalować na Eclipse , który już ją ma , ale spróbuje. 
Jeśli odpalamy Eclipse po raz pierwszy poprosi o wybranie miejsca zapisu projektów. Wybierzmy go nie "ot tak" (np na drugim dysku jeśli mamy, dobrze nazwać folder żeby potem nie było 31276312 lat szukania projektu).
Eclipse jak wygląda każdy wie.
Zaznaczone rzeczy to te, których jeszcze nie macie. Po lewo - Otwiera SDK , po prawo - Otwiera AVD. 
INSTALUJEMY!
Wchodzimy w Help -> Install new Software 
Klikamy Add i w nazwie wpisujemy Android a w linku https://dl-ssl.google.com/android/eclipse
Z Listy rozwijanej na górze po dodaniu wybieramy Android i z pojawiających się rzeczy zaznaczamy Developer Tools

"gwałcimy Next" i czekamy aż się zainstaluje. Po wszystkim Restartujemy Eclipse (zapyta się nas czy chcesz żeby się zrestartował) i mamy już te 2 ikonki. :)
Pierwszy Projekt? "USZANOWANKO ŚWIECIE!"
Klikamy File->New-> Java Project
Ja swój projekt nazwałem Uszanowanko. Nazwa Może być dowolna, byleby programista wiedział o co chodzi. Po Utworzeniu nasz projekt wygląda tak :
Aby Miało ręce i nogi klikamy na src i wybieramy Create package.

Nazwa Pakietu Musi być unikalna. ja zawsze nazywam Aplikacje swoją "domeną" pl.cheqoladowy.<nazwa_aplikacji> . "pl" z początku oznacza kraj a dalej mój nick (choć tak mogę być przez chwilę patriotą...) Klikamy na Utworzony Pakiet i wybieramy Create Class. 
Nastanie taki czas że wytłumaczę wam co i jak. Uzupełnijmy to okno tak jak podałem (nazwa dowolna , najważniejsze żeby zaznaczyć public static void main(String[] args) ). Utworzy nam się nowa klasa i pokaże w oknie Eclipse. 
Dodajmy pomiędzy { } po public static void main(String[] args) Następującą linijkę:
System.out.println("Uszanowanko dla Świata");

Wygląda to tak :
I kliknijmy "PLAY" - zielony guzik na górze w rzędzie gdzie są guziki do Android SDK i ADT
a na dole w oknie Console Powinniśmy zobaczyć
Co to oznacza? Że wygląda na to że wszystko działa! Eclipse jest "Skonfigurowany" (w następnej części na wstępnie sprawdzimy czy dobrze odwołuje się do Androidowego SDK i jak nie to naprawimy to), więc spokojnie będziemy mogli napisać pierwsze "uszanowanko dla Świata" na Telefony.

Dziękuję za przeczytanie. Co dalej? Myślę nad szybkim (na prawdę szybkim) kursem Javy , składnią i samym kodzeniem. No to - Do następnego! :)

środa, 19 marca 2014

"Wgrywanie" Androida - słów kilka.

Ostatnio coraz częściej piszą do mnie osoby , które "widzą że ogarniam telefony to im pomogę". O ile na początku było to dosyć przyjemne (bo żyłem z myślą "jedyny taki magik w okolicy") tak z czasem nastawienie ludzi do "wgrywania Androida" zaczęło mnie irytować.

Uniwersalna metoda wgrywania nowego softu? Zapomnij.
Każdy producent telefonu z Androidem dba o to żeby system był szybki, dobry, rozbudowany i przyjazny użytkownikowi. Jednak w momencie kiedy Pan A wgra 14123 aplikacji, 1237897 widzetów, 12389078123978 mpTrójek oraz skusi się na oglądanie filmów korzystając z telefonu/Tabletu telefon (bo nie system) najzwyczajniej w świecie odmówi posłuszeństwa i zacznie "mulić" gdyż zacznie mu brakować miejsca na pamięci użytkowej , ram'u oraz miejsca w cache'u Dalvika. Wracając do producentów , każdy z nich stara się żeby system był zabezpieczony w taki sposób aby zwykły zjadacz chleba nie zrobił tzw "a co się stanę jak kliknę tu? Ojej nie działa...." . Uniwersalna blokada tego była ,owszem , do Androida 2.3. W "Tych pięknych czasach" "programów i metod" (słowa exploitów nie używam celowo - dla zainteresowanych co to znaczy odsyłam do google) do rootowania można było policzyć na palcu jednej ręki. Obecnie każdy producent stara się zabezpieczyć telefon przez hakowaniem jak tylko może. Jak się im to udaje wie każdy kto "siedzi w branży".
Ale jak to "hakowanie telefonu"?  Czy będe hakerem?
Nie. Po prostu posiadam bardzo "fajną" książkę "Hakowanie Androida" (polecam - bardzo fajnie wyjaśnione działanie systemu) i dlatego używam tego terminu. Większość z was pewnie słysząc "haker"
 widzi zakapturzonego człowieka bez twarzy w ciemnym pokoju gdzie jedynym źródłem światła jest ekran komputera i jego widok odbijający się od puszek napojów energetycznych. Warunkiem wgrania nowego Androida jest jego zrootowanie i odblokowanie bootloadera co wiąże się z obejściem zabezpieczeń więc w pewnym stopniu (z podkreśleniem "pewnym") jesteś hakerem. Ale nie bój się. Jedyne co Ci grozi to uceglenie telefonu. 
Etapy wgrywania nowego systemu.
W czasie złości jak ktoś pyta mnie się "JAK?!" odpowiadam "poszukaj w googlach albo na xda. jak tam nie ma to nie da się tego zrobić". Tak , czasem mówię to co myślę ale nie o to chodzi. Mogę przegadać o Tym godziny jak to działa, dlatego właśnie jest ten wpis aby "przybliżyć" jak to wszystko wygląda.
ROOT: Poprawnie wykonany dodaje nam bibliotekę su oraz (co jest mało istotne) aplikację SuperUsera. Root jest wymagany , ponieważ dzięki niemu możemy zapisywać w systemie informacje. Brzmi nie logicznie prawda? Z jednej strony - tak , to wcale nie ma sensu. Bo przecież "Gdzieś się te aplikacje zapisywać muszą!". Z drugiej , tej poprawnej strony (można by śmiało powiedzieć ze strona developerska) , partycja systemowa jest tylko do odczytu  (więc gdzie się zapisują wasze Angry Birdsty i 1231239 innych widzetów? na partycji data - polecam archiwum bloga - już pisałem trochę o tym w "Rozbieramy Androida na czynniki pierwsze"). To jedno z zabezpieczeń przed nieumyślnym "OJEJ POPSUŁO SIĘ". Root dodaje nam uprawnienia supermegahiperextra administratora urządzenia , dzięki czemu możemy wykonać magiczne zaklęcie, co pozwoli nam na zapisie w systemie. Skoro chcemy wgrać nowy system , musimy się pozbyć starego. A zeby się pozbyć starego trzeba go po prostu usunąć - dla testów polecam stworzyć plik "Tylko do odczytu" w windowsie i spróbować go usunąć. Tak samo jest i tu.
Odblokowanie bootloadera: W momencie włączania urządzenia "COŚ" (serio - w tym systemie ciężko powiedzieć co...) sprawdza poprawność podpisania systemu (certyfikatami). Standardowy (stockowy) system jest podpisany oficjalnymi pierdółkami od producenta z góry, nowe (Customowe) systemy nie posiadają takiego podpisu, więc po instalacji systemu który nie jest podpisany "COŚ" stwierdzi że to nie system i nam podziękuje uniemożliwiając uruchomienie telefonu. Odblokowanie bootloadera polega na usunięciu etapu sprawdzenia certyfikatów systemu, recovery a nawet samego bootowania. Wykonujemy wtedy tzw. S-OFF (Security OFF, wiadomo - zablokowanie bootloadera to S-ON). Przez co możemy instalować niestandardowe i często nie podpisane certyfikatami modyfikacje na telefonie. 
Ej to teraz jak wgrać....?
Root - znajdź skrypt na swój telefon i postępuj zgodnie z instrukcjami. Odblokowanie bootloadera najczęściej polega na podmiany pliku w systemie (do czego wymagany jest root) więc znajdź plik i postępuj zgodnie z instrukcjami. Potem znajdź nowy system i postępuj zgodnie z instrukcjami.
Dlaczego nie powiem jak? Bo jak już wcześniej wspomniałem nie ma uniwersalnej metody. Rootowanie L5 zajęło mi 1 dzień bo nie chciałem wgrywać zrootowanego softu i udało się , wystarczyło kliknąć ROOT. Natomiast Rootując ARC S musiałem Restartować go co chwilę , nie mówiąc o tym że trzeba było ustawić czas uśpienia na 15 minut. Każdy producent ma inne metody - bardziej i mniej skomplikowane.
Ej bo mi nie działa....
Zrobiłeś coś nie tak? Ominąłeś lub zignorowałeś jakiś punkt? Nie zrobiłeś kopi zapasowej? Sam Sobie jestes winien. Nikt Ci nie każe wgrywać nowego Androida ,  wszystko robisz na własną odpowiedzialność. Nie działa Ci telefon po wykonaniu skryptu? Tak samo jesteś sobie winien. Czy jeśli ktoś zatrzymał Cię na ulicy i powiedział "Daj mi swój telefon" dał byś mu go (nie mówię o dresach) ? Myślę że nie. Tak samo zaufałeś człowiekowi któremu Podobno "działa!", którego nigdy na oczy nie widziałeś i ani słowa nie wymieniłeś. Ryzyko jest duże - pamiętam jak sam patrzyłem w konsole rootując swojego OT-908, kiedy ciśnienie mi latało jak szalone, a o wgrywaniu softa nie wspomnę. A byłbym zapomniał - gwarancji już nie masz - proces rootowania ją "zabiera"...

Wyklikane rozmyślenia w pracy. Mam nadzieję że tutaj choć trochę przybliżyłem jak to działa i dostanę "spokój" od głupich pytań :3

Pozdrawiam ! :)

czwartek, 13 marca 2014

[Własna Aplikacja na Androida #1] Moje rozmyślania + Szybkie przygotowanie stanowiska.

Bardzo dawno temu stwierdziłem -  "Kurczę! Przydałoby się dodać to tu, a może jakąś unikalną aplikacje do romu dodać?", a że na półce z książkami leżało "Hello Android" stwierdziłem że wrócę i ponownie spróbuję coś "przykodzić" pod ten system. Obecnie "odkładam pieniądze" na konto Developerskie Sklepu Play - ale nie o Tym dzisiejszy post.

Stwierdziłem że mógłbym spróbować napisać co nieco o samym Tworzeniu aplikacji na Platformę Google'a. Czasami Modyfikacja Grafiki i pliku XML nie wystarcza , Developer chcąc zedytować aplikację musi zajrzeć do jej "kodu" który dla osoby która siedzi w tym "trochę" nie jest w pełni zrozumiały (BA! prawie wcale). Znalazłem "Pewną metodę" na to , aby mniej więcej zrozumieć "sam kod Dalvika" (Dalvik, jak już wiecie bądź nie , jest wirtualną maszyną siedzącą w Systemie Android. Rozwiązanie jest o tyle "dziwne" że biorąc pod uwagę co się dzieje w systemie - w skrócie to wygląda tak, odpala się telefon , boot systemu bazującego na linuxie , odpalenie wirtualnej maszyny do obsługi Aplikacji i Frameworków i dopiero możemy korzystać z telefonu. Patrząc trzeźwym okiem Android to System , który ma w sobie maszynę do obsługi Androida - rozwiązanie to można uznać za... dziwne?). Metoda ta polega na Tym, że przeglądam kod aplikacji w javie , szukam funkcji która odpowiada za rzecz którą chcę modyfikować , po linijkach szukam miejsca mnie interesującego, a na końcu patrzę w kod pliku *.smali i modyfikuje. Logiczne?

No nie dla wszystkich. Wymagana jest podstawowa znajomość działania aplikacji systemu. Dzisiaj numer jeden , JAVA , czyli język który osobiście uwielbiam pomimo tego że nie znam go jakoś super hiper mega dobrze. ;)

Java jest obiektowym jeżykiem firmy ORACLE który wymaga do działania samej javy - logiczne. Tyle wam wystarczy teorii.

Przygotowanie stanowiska pracy czyli co żem mieć muszem ażeby pokodzić!
Samą Javę.
https://www.java.com/pl/download/
Java JDK.
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
No i przydałby się jakiś edytor . Osobiście wielbię Eclipse więc go wam polecam z Całego serca.
https://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/keplersr2
Ważne! Eclipse jest kombajnem developerskim. Wybór nowszej wersji na starszym sprzęcie może nam przysporzyć kłopotów z użyciem procesora. Przeżyłem to ostatnio na moim laptopie - przy mocnym sprzęcie nie powinno być problemu z nowszą wersją jednak pragnę zwrócić uwagę , że chcąc pisać aplikację na androida wersja ta powinna (a nawet musi) być wyższa niż Galileo bo android-sdk nie będzie chciał się zainstalować.

O Ile pierwsze 2 rzeczy instalujemy - trzecią wystarczy jedynie wypakować i uruchomić Eclipse. Cyż nie proste?
W "Następnej części" ściągniemy sobie Android SDK Tools do Eclipse , skonfigurujemy go i co najlepsze - postaramy się napisać prosty programik w Javie. Postaram się wytłumaczyć składnie i "zasady panujące w javie"

Do Następnego! :)