Aplikacje w Androidzie można podzielić na dwa typy: systemowe i użytkownika. Systemowe aplikacje są teoretycznie nie do ruszenia i zazwyczaj są wymagane do poprawnego działania telefonu. Aplikacje użytkownika to wszystkie te które są przez niego zainstalowane. Opiszę jak zmieniać aplikacje z jednego typu na drugi.
Na początek może zrodzić się pytanie po co w ogóle zmieniać typ aplikacji. Pierwszy powód to chęć zbudowania własnej paczki systemu Android z dodatkowymi aplikacjami czyli popularnie zwanego "romem". Drugi powód to integracja aktualizacji systemowych z systemem, ponieważ zaktualizowana aplikacja tak naprawdę zapisuje się na partycję /data, a nie /system. Dzięki czemu możemy bezpiecznie usunąć aktualizacje i używać oryginalnej wersji aplikacji. Tak jest w przypadku Google Play/Android Market. Oryginalny pakiet z aplikacją marketową zapisany jest w /system/app/Vending.apk, a zaktualizowana wersja zapisana jest w /data/app/com.android.vending-1.apk. Żeby aktualizacja nie zajmowała miejsca na partycji z danymi można ją skopiować na partycję systemową.
Potrzebny będzie dostęp do konsoli na Androidzie. Najlepszy do tego jest ADB (Android Debug Bridge), podstawowe narzędzie do zabawy z Androidem. Trzeba też włączyć tryb programisty w smartfonie. Do konsoli podłączamy się za pomocą:
$ adb shell
Aby móc modyfikować cokolwiek na partycji systemowej należy ją zamontować w trybie do zapisu. Domyślnie jest tylko do odczytu z oczywistych powodów. Poniższym poleceniem dokonujemy montowania do zapisu:
# mount /system -o rw,remount
Aplikacje systemowe znajdują się pod ścieżką /system/app/ a aplikacje użytkownika w /data/app/. Jeśli chcemy zintegrować aktualizację aplikacji z systemem trzeba przenieść paczkę apk z /data/app do /system/app, oczywiście nazywając ją tak jak się nazywała wersja systemowa. Np. integrując aktualizację Google Play z systemem należy w konsoli wydać polecenie:
# mv /data/app/com.android.vending-1.apk /system/app/Vending.apk
Po przeniesieniu edytujemy plik /data/system/packages.xml za pomocą VI. Wyszukujemy tekstu np. "com.android.vending-1.apk". Po znalezieniu zobaczymy ścieżkę dostępu do wcześniejszego położenia pliku na partycji /data. W parametrze codePath zamieniamy ścieżkę na taką jaką przenieśliśmy wcześniejszym poleceniem czyli /system/app/Vending.apk wg przykładu.
Czasem się zdarza podczas integracji aktualizacji w pliku packages.xml będzie już podana nowa ścieżka do pliku, wtedy niczego nie zmieniamy. Aby zmiany weszły w życie możemy zrestartować smartfona, ale wystaczy tylko ponowne uruchomienie maszyny wirtualnej Dalvik. Do szybkiego reboot'a można użyć, któregoś z programów do tego przeznaczonych np. Hot Reboot. Ja restartuje Dalvika za pomocą polecenia:
# stop;sleep 5;start
Na koniec zalecam przywrócenie stanu tylko do odczytu na partycji systemowej:
# mount /system -o ro,remount
Zmiana aplikacji systemowej na użytkownika odbywa się w ten sam sposób, tylko przenosimy dane odwrotnie. Oczywiście to był przykład tego jak można to ręcznie zrobić. Funkcję integracji aktualizacji posiadają aplikacje Titanium Backup Pro i Link2SD, które zrobią całą robotę za nas. Jeśli jednak nie posiadamy tych aplikacji i chcemy się czegoś nauczyć można wykorzystać ten sposób.