12 марта 2012

Операции над системными приложениями в OS Android.



Итак, у Вас появился жуткий зуд в руках и дикое желание в голове потеребить системные приложения в своё андроидофоне, но платить за TitaniumBackup не позволяет жадность, а пользоваться взломанной версией мешает совесть. Про затыки с обновлением системных приложений в ROM я наслушался достаточно, а с преобразованием системных приложений в пользовательские намучился сам.
В этой статье я расскажу, как самому произвести все эти операции без риска что-то сломать.
Готовим инструменты.
На этот раз нам понадобится файловый менеджер, который умеет работать с правами сеперпользователя. Лучше всего с этой задачей справится платный RootExplorer, но можно обойтись и бесплатным EStrongs File Explorer. В данном конкретном случае эти программы подойдут одинаково, но в ES File Explorer надо включить в настройках монтирование раздела "/system" для записи вот таким образом:
И бесплатная версия TitaniumBackup.



На повестке дня следующие:
  • Сделать из системного приложения пользовательское;
  • Сделать из пользовательского приложения системное;
  • Обновить системное приложение.

Делаем из системного приложения в пользовательское.Для начала запускаем TitaniumBackup и делаем резервную копию приложения, над которым будем издеваться. Пусть в этот раз это будут Google карты.
Как я написал выше, делаем резервную копию приложения в TitaniumBackup и без тени сомнения удаляем его из системы. Всё, теперь у нас нет приложения в системе, но есть его резервная копия.
Теперь идем в Google Play (он же бывший Android market), находим там наше бывшее системное приложение и просто его устанавливаем. Осталась одна проблема: мы таким способом потеряли все настройки. Но! У нас же осталась резервная копия! Поэтому опять запускаем TitaniumBackup, находим в списке наше приложение, даем команду на восстановление приложения, но из предложенных вариантов выбираем кнопку "Только данные".



Всё, теперь у нас системное приложение стало пользовательским и сохранило все свои настройки.

Делаем из пользовательского приложения системное.Тут всё гораздо проще.
Все пользовательские приложения хранятся в памяти телефона по адресу "/data/app", туда мы и направимся.
Возьмем для примера программу OS Monitor и сделаем её системной. По значку находим её в вышеозначенной папке, у меня она называется "com.eolwral.osmonitor-1.apk". Просто берем этот файл и переносим его в папку "/system/app". Теперь приложение стало системным, но в системе от него всё еще остался мусор, который съедает драгоценную внутреннюю память. Найти его можно по адресу "/data/dalvik-cache" по имени data@app@com.eolwral.osmonitor-1@classes.dex. Найденный файл просто удаляем.
Теперь опять перезагружаем телефон и пользуемся.
Перезагрузка нужна, чтобы система создала кэш-файл для перенесенного приложения.

Обновляем системное приложение.
В Android довольно хитрый механизм обновления системных приложений. По причине того, что в штатном режиме работы раздел "/system" на запись не доступен, то новая версия приложения просто помещается в "/data/app", она же используется при тапе по ярлыку приложения.
Процесс обновления рассмотрим на примере программы Суперпользователь, которая ставится при взломе системы с целью получения root-прав или уже есть в кастомных прошивках.
У нас есть две копии программы: одна в "/system/app" под именем "Superuser.apk", другая в "/data/app" под именем "com.noshufou.android.su-1.apk". Для обновления системного приложения достаточно перенести "com.noshufou.android.su-1.apk" в папку "/system/app", потом удалить файл "Superuser.apk" и переименовать новый файл в "Superuser.apk".
Всё! Теперь у нас системное приложение имеет последнюю версию.
Теперь надо почистить папку "/data/dalvik-cache", удалив файл data@app@com.noshufou.android.su-1@classes.dex.
Опять же перезагружаем телефон, чтобы система самостоятельно обновила свой кэш.

Камрады с 4PDA сказали, что для полной радости надо провести еще пару манипуляций над файлами.
Проблема в том, что файлы из "/system/app" пренадлежат пользователю root и группе root, а файлами из папки "/data/app" владеет пользователь system и группа system.
После всех манипуляций надо восстановить права для файлов. Для этого надо подключиться к телефону с помощью команды "adb shell" или запустить любой эмулятор телефона непосредственно на телефоне. Права исправляются следующими командами:
# получаем права суперпользователя
su
# исправляем права для файлов в /system/app
busybox chown -R root.root /system/app/*
# исправляем права для файлов в /data/app
busybox chown -R system.system /data/app/*

Теперь всё будет работать как надо.