понедельник, 13 февраля 2012 г.

Как правильно заменять системные APK-файлы на Android?



Это опять я и мои инструкции для чайников и кофейников с картинками.
На этот раз я подробно расскажу о правильной замене системных компонентов ОС Android на примере установки модификации строки состояния.
Android - это маленький Linux. В нём надо соблюдать ряд правил при замене файлов, чтобы телефон не превратился в кирпич, оживить который поможет только полная перепрошивка с потерей всех данных из внутренней памяти устройства. Внутренние разделы отформатированы в файловую систему отличную от FAT32 на флешках. В свойствах файла кроме всего прочего хранятся разрешения для разных групп пользователей (хозяин файла, группа хозяина файла, остальные пользователи). При операции с системными файлами их надо сохранять, потому что при загрузке система просто может не суметь получить к ним доступ и не загрузиться нормально.
Начнем с инструментария.

Нам понадобится:
  • Менеджер файлов, который умеет работать с root-правами и разрешениями файлов. Лучше всего подойдет Root Explorer (Вы же его купили, да?)
  • Сам модифицированный файл, который мы хотим положить наместо системного (ссылка в конце статьи).

Для начала нужно найти и сохранить резервную копию заменяемого файла.
Для этого запускаем Root Explorer и переходим в каталог "/system/app" и в списке находим нужный файл.



Теперь используем одну из удобных функций Root Explorer. Сделаем долгий тап по нужному файлу, чтобы вызвать контекстное меню



И щелкаем по пункту "Zip this file", чтобы сохранить файл в zip-архиве на SD-карте. После архивации получим такое сообщение:



Нажимаем кнопкй "Stay", чтобы остаться в папке и сделать еще кое-что.

Теперь всё готово для замены файла.
Я уже говорил про права доступа у каждого файла. Чтобы их воссоздать на новом файле, надо сначала посмотреть их у старого. Они представлены рядом символов "rwxrwxrwx". 1-я триада - права владельца, 2-я - группы владельца, 3-я - всех остальных пользователей. У нашего файла права "rw-r--r--".



Теперь переходим на SD-карту, находим там модифицированный файл и из его контекстного меню выбираем пункт "Copy", но не торопимся выбирать сразу папку "/system/app", потому что мы тут же повредим систему. Вместо этого копируем файл в специальную папку для временных файлов "/data/local/tmp", чтобы привести файл в вид, который примет система.
Для начала вызовем контекстное меню файла и выберем пункт "Rename" и введем имя файла "SystemUI.apk". Именно так, потому что в Linux регистр букв в имени имеет значение, т.е. "systemui.apk" и "SystemUI.apk" - это разные файлы.
Далее надо изменить права на файл, потому что сейчас они почти наверняка выставлены неправильно. Для этого опять вызываем контекстное меню файла долгим тапом и выбираем пункт "Permissions". Для нашего значени "rw-r--r--" флажки надо расставить так:



Нажимаем "OK" и снова вызываем контекстное меню. Теперь надо изменить владельца и группу для этого приложения. Для этого выбираем пункт "Изменить владельца". Появится окно с информацией о текущем владельце файла.

Тут надо сделать маленькое отступление.

В папке "/system/app" всеми файлами владеет пользователь "root" (uid=0) и группа "root" (gid=0), а в папке "/system/framework" властвует пользователь "system" (gid=1000) и группа "system" (gid=1000).

Исходя из вышесказанного, выставляем нужные значения и нажимаем "OK".

И в третий раз вызываем контекстное меню для файла и в нем выбираем пункт "Copy" и в диалоге копирования переходим в папку "/system/app". Теперь смело нажимаем "Paste" и читаем дальше внимательно.
Практически сразу система сообщит, что процесс строки состояния внезапно завершился, и предложит его запустить. Всё попытки будут неудачными. Между появлениями окон надо успеть сделать ряд действий. Перед нажатием кнопки надо вызвать меню выключения аппарата, оно окажется под предупреждением. Теперь надо расположить палец примерно в левой стороне кнопки. Теперь надо очень быстро щелкнуть три раза пальцем, что успеть закрыть предупреждение, выбрать пункт выключения и подтвердить свои намерения.
Теперь ждем выключения телефона, заново его запускаем и наслаждаемся результатом или не наслаждаемся и ищем ошибки.

И обещанный архив с модифицированным файлом. http://radjah.ucoz.ru/rar/systemui.zip (324 килобайт)

Товарищ Sashoooq подсказал более безопасный вариант установки подобных модификаций.После копирования файла в "/data/local/tmp" и изменения прав у него скопировать его в папку "/system/framework" и перезагрузить телефон. В итоге оригинальный файл останется лежать на своём месте, а система будет загружать модифицированный.Такой способ не является безопасным для apk-файлов, которые уже лежат в этой папке. А лежат там очень вайжные для работы и стабильности системы файлы ("framework-res.apk" и некоторые файлы от производителя).

Статься написана специально для форума 4PDA.