piątek, 14 czerwca 2013

Uzyskiwanie uprawnień Root'a w aplikacji.

ZRootowanie telefonu przynosi wiele korzyści jak i zagrożeń. Dzięki uprawnieniom SuperUser'a możemy modyfikować piki systemowe (których uprawnienia są domyślnie ustawione na Tylko do odczytu) modyfikować taktowanie CPU , korzystać z Firewall'a itp. Root rozszerza nam możliwości telefonu.

Wiele aplikacji z niego korzysta. Uprawnienia SU nie są zadeklarowane tj np uprawnienia do odczytu Kontaktów, Sms'ów , karty SD itp o których informujemy plik AndroidManifest.xml w trakcie tworzenia aplikacji. Jednak aby je otrzymać wystarczy jedna linijka kody przy Starcie Aktywności (onCreate) bądź odpaleniu/Aktualizacji widgetu (onEnabled,onUpdate)


Runtime.getRuntime().exec("su");

Całą filozofia. :) Oczywiście edytor zasugeruje nam żebyśmy wrzucili kod w try/catch i otrzymamy takie coś


try 
{
 Runtime.getRuntime().exec("su");
} 
catch (IOException e) 
{
 //Nie znalazł polecenia SU
}

Dzieje się tak ponieważ a androidzie większość rzeczy wykonujemy przez wpisanie polecenia (zupełnie tak jak byśmy operowali terminalem). W kodzie tak naprawdę wywołujemy uplecenie su dzięki czemu do momentu zakończeni sesji (która kończy się zamknięciem aplikacji) nasz pakiet (aplikacja) ma możliwości roota.

niedziela, 9 czerwca 2013

Android - Własny ROM - Proste Modyfikacje.


Kiedy mamy już przygotowane miejsce pracy możemy śmiało wziąć się za modyfikacje Androida. Tutaj zajmiemy się prostymi modyfikacjami - dodaniem niestandardowych aplikacji, podmianą Boot Animacji, "Podpisaniem Własnego Romu" oraz co nieco o zmianach w wyglądzie.

Pamiętaj Przed wszystkim wykonaj kopię zapasową plików!! Nie biorę odpowiedzialności za ew uszkodzenia. Wszystko robisz na własną odpowiedzialność!!

1) Co potrzebuję?

Możesz spróbować napisać Androida od zera , ściągnąć, edytować AOSP i skompilować na swój telefon by mieć własny rom tylko pytanie - po co? Skoro jesteś początkowym Developerem (tak jak ja) bazuj na instalacyjnych paczkach zip do Recovery. Pamiętaj żeby był to Rom który działa pod Twoim telefonem (co jest rzeczą oczywistą, przypominam żeby nie było sytuacji że nie działa).

Zipem może być Stockowy rom bądź Cyanogenmod, AOSP, AOKP, Paranoid, MIUI itp - co Ci się podoba i czego potrzebujesz. Kiedy już zdecydowaliśmy na którym androidzie nasz Rom będzie bazował rozpakuj go do folderu , do którego będziesz miał pełen dostęp za pomocą 7zip, winrar bądź innego programu tego typu.

2) Dodanie/Usuwanie Aplikacji do Romu.

Dodanie Aplikacji do Androida to rzecz tak bardzo banalna że aż się nie będe rozpisywał. Wiadomo - potrzebujemy plik instalacyjny Aplikacji (rozszerzenie apk, tu polecam zaciekawić się z tematem starego dosyć narzędzia jakim jest Lucky Patcher - pozwala on m. in na stworzenie pliku APK wybranej aplikacji z poziomu telefonu z Androidem) Aplikacje wrzucamy do folderu /system/app . Sytuacja podobna jeśli któreś z aplikacji nie chcemy. Wystarczy ją wtedy usunąć z tego folderu. Uwaga! Aplikacje te są umieszczone na partycji system do którego przypisane atrybuty tylko do odczytu! Jeśli chcemy zezwolić użytkownikowi na Odinstalowanie wrzuconej przez nas aplikacji umieśćmy ją w folderze custpack/app/ .

3) Zmiana animacji startowej.

Szukamy w naszym folderze z romem pliku bootanimation.zip i robimy mu kopie zapasową (jakby coś się spsuło) Kolejny zip w naszym romie który można wypakować i dowolnie zmodyfikować. Obrazki tam wrzucone można podmienić na własne, zapisać , spakować do bootanimation.zip i wrzucić w stare miejsce.
Aby ułatwić życie można przygotować sobie film i skonwertować go na format obrazkowy mając każdą klatkę filmu w pliku. Taką rzecz umożliwia nam narzędzie The Rad Video Tools z którego sam korzystałem tworząc pierwszą boot animacje. Skonwertowane grafiki wrzucamy do zipa razem z  plikiem desc.txt (jest on potwornie ważny gdyż tam jest opisane rozdzielczość wyświetlana i ilość partów bootanimacji - nie spotkałem się jeszcze z więcej niż dwoma partami)

4) Własny wygląd

O tyle dobrze że w Androidzie wszystko to jedna wielka bitmapa (dokładnie png/ 9.png jednak różnica między nimi jest taka że png normalnie zapiszemy a żeby zapisać jako 9.png wystaczy do nazwy obrazka dopisać .9 i zapisać jako png) więc i tu edycja nie jest skomplikowana.

Plik którym się zajmiemy to przede wszystkim framework-res.apk (w androidzie 2.3 i wyżej można wykorzystać też SystemUI.apk). Otwieramy go jak zwykłego zipa i zajmujemy się katalogiem res/drawable-nasza_rozdzielczość (hdpi, ldpi lub nodpi) w nim mamy multum obrazków które możemy otwirzyć , zmodyfikować nawet w paincie (ale bez przesady bo to png i przeźroczystość nie będzie dobrze działać)
Pamiętajmy tylko żeby nie ruszać plików xml. Są one "gotowe do edycji" dopiero po dekompilacji framework-res a ich "wygląd" nas nie zadowoli. 

Po wszystkim zmienione obrazki podmieniamy z tymi z framework-res.apk jak pliki w zwykłym zipie ;)
Można skorzystać z gotowego rozwiązania na http://uot.dakra.lt/ gdzie wrzucamy pliki podane przezemnie i wybieramy co nasz rom ma mieć nowego w wyglądzie. Proste! :D
5) To mój rom!

Własnie zmodyfikowałeś Androida. Teraz można by jakoś zakomunikować userowi że to Twój rom.
Dodajemy wpis do Setting
Bez problemu można zmienić Numer Kompilacji w Systemie wchodząc w Ustawienia -> Informacje o telefonie. 
Aby dodać info o "nas" w build.prop naszego romu szukamy linijki

ro.build.display.id=

I za = wpisujemy nazwę romu.

Info przy instalacji
w folderze \META-INF\com\google\android mamy plik updater-script. Zawiera on instrukcje flashowania romu z poziomu recovery. Lepiej nie tykać się (narazie0 innych funkcji oprócz

ui_print
Które wyświetlają na ekranie to co wpiszemu w środek funkcji. Przy Edycji CM7 dla move dodałem "takie coś"

ui_print("CYANOGENMOD 7 by EWRA Project");
ui_print("edit by CheQ for MOVE");

Dodajemy Analogicznie.


Po wszystkim Tworzymy Zipa w którym znajdują się foldery z naszego romu (struktura musi być dokładnie taka sama) wrzucamy ją na sd , odpalamy Recovery i instalujemy.

W ten oto sposób mamy własny Rom na Androida.
Miłej zabawy! :)