Для чего нужны скрытые системные разделы Windows и можно ли их удалить. Рекомендуемые конфигурации разделов дисков в системах на базе BIOS

Сведения о конфигурациях разделов диска для компьютеров на основе UEFI см. в разделе Рекомендуемые конфигурации разделов дисков в системах на основе UEFI .

Этот раздел также содержит описание конфигурации по умолчанию и примеры конфигураций, использующих разделы восстановления, использующих свыше четырех разделов и использующих один раздел. Другие конфигурации поддерживаются, если они соответствуют требованиям, описанным в разделе Общие сведения о разделах диска .

Описание создания структуры разделов с помощью диспетчера установки Windows® см. в разделе Создание разделов жесткого диска на базе BIOS с помощью диспетчера установки Windows .

При развертывании на основе образов используйте средство DiskPart для создания структуры разделов на конечных компьютерах. Инструкции см. в разделе Применение образов с помощью ImageX .

Конфигурация по умолчанию

Для новых установок программа установки Windows по умолчанию создаст системный раздел и раздел Windows.

Структура разделов показана в следующей таблице.

Программа установки Windows автоматически создаст эти разделы диска в следующих случаях:

  • на компьютере отсутствует системный раздел;
  • на компьютере еще нет трех существующих разделов;
  • достаточно дискового пространства для создания разделов;

при обновлении Windows с предыдущей версии программа установки Windows не меняет порядок разделов.

Приведенный ниже код содержит сценарий для средства DiskPart, создающий стандартную структуру разделов для использования в развертывании на основе образа.

Select disk 0 clean create partition primary size=300 format quick fs=ntfs label="System" assign letter="S" create partition primary format quick fs=ntfs label="Windows" assign letter="W" exit

Восстановление системы

Чтобы разрешить пользователям восстанавливать или переустанавливать Windows без удаления средств восстановления, рекомендуется устанавливать средства восстановления, такие как среда восстановления Windows, либо в системный раздел, либо в отдельный раздел восстановления.

После установки можно настроить систему так, чтобы диспетчер загрузки Windows запускал средство восстановления, если не удается запустить Windows.

Для настройки отдельного раздела восстановления определите этот раздел как служебный, задав тип раздела следующим образом.

  • В диспетчере установки Windows задайте значение для элемента Microsoft-Windows-Setup \DiskConfiguration\Disk\ModifyPartition\TypeID значение 0x27 .
  • После создания и форматирования раздела используйте команду set id=27 средства DiskPart.

В следующем примере конфигурация содержит основной раздел восстановления, основной системный раздел и основной раздел Windows.

Описание Создать раздел: порядок Создать раздел: расширить Создать раздел: размер Создать раздел: тип Изменить раздел: порядок Изменить раздел: PartitionID Изменить раздел: активный Изменить раздел: формат Изменить раздел: метка Изменить раздел: буква Изменить раздел: TypeID

Средства восстановления (например, Windows RE)

Основной

Восстановление

Системный раздел

Основной

Системный

Основной

Select disk 0 clean create partition primary size=3000 format quick fs=ntfs label="Recovery" assign letter="R" set id=27 create partition primary size=300 format quick fs=ntfs label="System" assign letter="S" active create partition primary format quick fs=ntfs label="Windows" assign letter="W" exit

Использование более четырех разделов

В системах на основе BIOS каждый жесткий диск может содержать до четырех основных разделов или до трех основных разделов и дополнительный раздел. Дополнительный раздел может быть разделен на несколько логических разделов.

На следующей схеме показаны три основных раздела (Recovery, Utility2 и системный раздел) и дополнительный раздел. Дополнительный раздел содержит логические разделы (Windows и Logical2).

В следующей таблице показаны параметры, используемые в диспетчере установки Windows, в разделе Microsoft-Windows-Setup \DiskConfiguration\Disk , для настройки конфигурации этого примера.

Описание Создать раздел: порядок Создать раздел: расширить Создать раздел: размер Создать раздел: тип Изменить раздел: порядок Изменить раздел: PartitionID Изменить раздел: активно Изменить раздел: расширить Изменить раздел: формат Изменить раздел: метка Изменить раздел: буква Изменить раздел: TypeID

Восстановление

Размер настроенного образа восстановления Windows

Основной

Восстановление

Основной

Системный раздел

Основной

Системный

Расширенный раздел

Расширенный

Логический

Логический

Для развертывания на основе образа создайте такую же структуру разделов на конечном компьютере. Следующий код представляет собой сценарий для средства DiskPart, создающий пример структуры разделов:

Select disk 0 clean create partition primary size=3000 format quick fs=ntfs label="Recovery" assign letter="R" set id=27 create partition primary size=250 format quick fs=ntfs label="Utility2" assign letter="U" set id=27 create partition primary size=100 format quick fs=ntfs label="System" assign letter="S" active create partition extended create partition logical format quick fs=ntfs label="Windows" assign letter="W" create partition logical format quick fs=ntfs label="Logical2" assign letter="L" exit

Использование одного раздела

Можно установить Windows на диск, содержащий только один раздел.

В следующей таблице показаны параметры, используемые в диспетчере установки Windows, в разделе Microsoft-Windows-Setup \DiskConfiguration\Disk , для настройки конфигурации этого примера.

Для развертывания на основе образа создайте такую же структуру разделов на конечном компьютере. Следующий код представляет собой сценарий для средства DiskPart, создающий пример структуры разделов:

Select disk 0 clean create partition primary format quick fs=ntfs label="Windows" assign letter="C" exit

Диски не отображаются в Проводнике Windows.

Системный раздел и разделы служебных программ по умолчанию не отображаются в Проводнике Windows. Чтобы убедиться в существовании этих разделов на целевом компьютере, выполните следующие действия:

  1. Нажмите кнопку Пуск , щелкните правой кнопкой мыши пункт Компьютер , а затем выберите пункт Управление . Откроется панель управления Управление компьютером .
  2. Нажмите кнопку Управление дисками . Отобразится список доступных дисков и разделов.
  3. Убедитесь в том, что разделы системы и служебных программ присутствуют в этом списке и не имеют назначенной буквы диска.

Права суперпользователя или по-простому рут - неотъемлемая часть мира операционной системы Android. Как известно, с его помощью можно существенно расширить функционал: от удаления рекламы до серьезной модификации программного обеспечения устройства. Однако, многие пользователи задаются вопросами в духе: «как запустить Сбербанк Онлайн с root?», - либо: «как играть в Pokemon GO на взломанном смартфоне?». Ответ на все это - Magisk.
С популяризацией систем бесконтактной оплаты, актуальным стал вопрос: «почему не работает Visa payWave с правами суперпользователя?». Раньше на помощь приходили модифицированные версии приложений с отключенной защитой, об их безопасности говорить нельзя, в apk-файл можно включить всё, что угодно! Разработчик под ником topjohnwu с форума XDA-Developers подошёл к проблеме совсем иначе!

Что такое Magisk

- современный администратор рут прав, по сути - более продвинутая альтернатива SuperSU от Chainfire с некоторыми функциональными нововведениями.

Интерфейс программы выполнен по гайдлайну Material Design, навигация интуитивно понятная, меню не перегружено лишними пунктами, только всё необходимое. Приложение, за редким исключением, русифицировано.

Основные особенности

Механизм получения прав суперпользователя MagiskSU не вмешивается в системный раздел. Такой подход является более безопасным по сравнению с классическим, и позволяет обновлять прошивку с форматированием системного раздела, без опасений за рут и дополнительно установленные модули.

Ключевая функция - возможность скрыть права суперпользователя от приложений, которые не работают на взломанном устройстве. К таким относятся клиенты многих банков, системы бесконтактной оплаты и, к примеру, Pokemon GO. Реализация удобная, рут скрывается в один клик, раздел Magisk Hide главного меню. Тот же Сбербанк Онлайн перестал сообщать об угрозе и открыл весь функционал!

Дополнительные модули

Ко всему прочему, в Magisk Manager включен мощный движок модов, который соответствует общей концепции приложения и работает без модификации системного раздела (systemless), можно не беспокоиться за порчу системных файлов, такой подход позволяет в любой момент отключить все дополнения. Установка модификаций осуществляется через кастомный рекавери или непосредственно через меню Magisk Manager. Уже сейчас существует множество модулей, самые интересные из них рассмотрим отдельно:

App Systemizer - модуль, который позволяет установить в качестве системного любое пользовательское приложение без модификации системного раздела. Установка в системный раздел вручную - не самое простое занятие, а в модуле необходимо лишь только отметить нужные приложения.

Viper4Android – популярный менеджер звуковых эффектов с широчайшими возможностями по настройке звукового тракта. С его помощью можно с лёгкостью раскрыть потенциал любого современного смартфона!

SELinuxPermissive Script - переводит систему безопасности SELinux в режим «Только предупреждение». Данную манипуляцию требуют некоторые приложения, например, аудио движок Viper4Android.

Xposed - мощный движок для модинга без изменения apk-файлов не требует представления. Поддерживается Android от Lollipop до Marshmallow. Отрадно, что теперь он работает без модификаций системных файлов! Для его установки помимо самого фреймворка из Magisk Manager необходимо установить Xposed Installer!

Выбор модулей и правда широкий, найти их можно в приложении, или в специальном разделе на XDA-Developers . Существует как общие модификации, вроде того же ViperFX или AdBlock, так и заточенные под определенные устройства, например, активация записи 50/60 FPS видео для Nexus 5X/6P, либо APT-X HD кодеки для OnePlus 3. Каждый найдет что-то интересное, а желающие смогут создать что-то своё, автор представляет весь необходимый инструментарий!

Как установить Magisk

Для установки приложения необходима версия ОС 5.0 Lollipop и выше, разблокированный загрузчик и кастомный рекавери, например, TWRP. Настоятельно рекомендуется сделать полный нандроид-бэкап на случай, если установка пройдёт неудачно.

Для полной функциональности Magisk Manager необходимо использовать MagiskSU, для корректной установки которого, предварительно рекомендуется удалить альтернативные администраторы рут прав. К примеру, SuperSU от Chainfire удаляется из меню настроек приложения.

Удаление Magisk Manager

Все необходимые для удаления файлы последней версии можно найти в топике
Для удаления приложения в автоматическом режиме , необходимо прошить Magisk-unistaller.zip соответствующей версии через кастомный рекавери.

В случае, если архив не отработал
, необходимо восстановить загрузочный раздел (boot.img) из резервной копии, а также вручную удалить /data/magisk.img, /cache/magisk, /data/busybox.

А что в итоге?

В результате выходит, что Magisk Manager – новый, современный подход к правам суперпользователя, который ориентирован на комфорт, а не на простую выдачу доступа. Очень радует модульность, с помощью которой можно достичь необходимого функционала без лишних рюшек. Проект активно развивается, думаю, что со временем разработчики начнут использовать его по умолчанию в своих кастомных прошивках.

Начнем с того, что тебе нужен Linux. В Windows ты сможешь только разобрать прошивку, но собрать обратно уже не получится по чисто техническим причинам. Теперь о прошивке. Обычно они распространяются в виде ZIP-архивов, прошиваемых через кастомные рекавери. Именно один из них нам и понадобится для опытов. Начинать путь ромодела я рекомендую с какой-нибудь максимально приближенной к AOSP кастомной прошивки, потому что в ней зачастую проще разобраться, чем в стоке.

  1. Распаковываем архив с прошивкой в любую папку.
  2. Качаем скрипт по ссылке и разархивируем в любую папку.
  3. Запускаем файл ext (если будет ругаться на отсутствие Java, просто пропусти, нажав y ; Java нужна только для запаковки).
  4. Теперь выбираем распаковку, нажав кнопку 1, а затем Enter.
  5. Новая папка с именем extract_* появится рядом с файлом ext и папкой tools . Копируем в нее файлы system.new.dat и system.transfer.list .
  6. После копирования файлов нажимаем Enter и ждем. Через некоторое время нужно будет опять нажать Enter, ввести пароль администратора и еще раз тапнуть Enter.
  7. Готово. Содержимое system в папке extract_*/output .

Ручной способ

Распаковываем архив с прошивкой в любую папку (например, в rom):

$ mkdir ~/rom $ unzip путь_до_архива -d ~/rom/

Скачиваем нужные нам инструменты в эту папку:

$ cd ~/rom $ wget https://github.com/xpirt/sdat2img/raw/master/sdat2img.py

Запускаем скрипт:

$ chmod +x sdat2img.py $ ./sdat2img.py system.transfer.list system.new.dat system.img

Он преобразует файл system.new.dat в raw-образ с именем system.img . Монтируем образ к подпапке mnt:

$ mkdir mnt $ sudo mount -t ext4 -o loop system.img ~/rom/mnt

Структура каталогов Android

После распаковки system появится следующая каталоговая структура:

  • app - предустановленные приложения со стандартными привилегиями;
  • priv-app - предустановленные приложения с повышенными привилегиями, в том числе некоторые компоненты системы;
  • bin - бинарные файлы формата ELF, аналог каталогов /bin и /usr/bin в Linux. Содержит различные системные компоненты, используемые более высокоуровневыми компонентами системы;
  • etc - файлы настроек. Полный аналог /etc в Linux, используемый, однако, только теми самыми системными компонентами. Приложения Android хранят индивидуальные настройки в каталогах /data/data/ ;
  • fonts - шрифты. По умолчанию содержит только фирменные шрифты Roboto;
  • framework - библиотеки Java-классов, используемых системой и приложениями. Тут же лежит файл framework-res.apk , содержащий полное описание интерфейса операционной системы, включая все графические файлы;
  • lib и lib64 - Linux-библиотеки, используемые низкоуровневыми компонентами системы. Аналог каталогов /lib и /usr/lib в Linux, включая такие стандартные библиотеки, как libc, libz, libssl. На устройствах с архитектурой ARMv7 и ниже каталог lib64 будет отсутствовать;
  • media - медиафайлы: рингтоны, звуки уведомлений, звуки интерфейса и анимация загрузки ОС;
  • tts - файлы, необходимые синтезатору речи;
  • usr - каталог, который обычно содержит файлы, необходимые для работы приложений из каталога bin. По сути, аналог /usr/share ;
  • vendor - файлы, поставляемые производителем устройства. Обычно содержит бинарный firmware для различных железных компонентов, например модуля Wi-Fi;
  • xbin - необязательный каталог; кастомные прошивки используют его для хранения таких вещей, как интерпретатор bash, SSH, PowerTOP, BusyBox, и других полезных инструментов;
  • build.prop - файл, содержащий информацию о сборке, а также различные низкоуровневые настройки;
  • addon.d - содержит скрипты, запускаемые после установки прошивки. Сюда же GApps прописывают свой скрипт, благодаря которому возрождаются после переустановки прошивки.

Ознакомившись с базовой структурой Android, начнем вносить изменения.

Удаляем и добавляем приложения

Все предустановленные программы можно найти в двух папках:

  • /system/app/;
  • /system/priv-app/.

Друг от друга они отличаются привилегиями доступа. Если программы из app имеют такие же полномочия, как сторонние программы (например, установленные из Play Store), то приложения из priv-app могут использовать привилегированные API (права privileged). Подробнее об этом можно узнать из .

Для предустановки приложения в прошивку просто кинь ее APK-файл в /system/app/ . Можно, конечно, создать отдельную папку, но в нашем случае в этом нет смысла, потому что папка служит для хранения библиотек и odex-файлов, которых у нас попросту нет. Для удаления просто удали папку с ним.

Можно пойти дальше и поменять стоковые приложения на аналоги. К примеру, для замены календаря удаляем папку Calendar и копируем в /system/app наш любимый com.rpagyc.simplecalendar.apk . А можно и не копировать. Тогда прошивка будет без календаря.

Главное, помни: стоковые программы могут быть связаны между собой. Поэтому удаление одной проги вполне может привести к полной неработоспособности другой (к примеру, CalendarProvider и Calendar: удалив первый, ты сделаешь неработоспособным не только стоковый, но и любой другой календарь). К счастью, в чистых AOSP-прошивках взаимосвязей не так много.

Меняем анимацию загрузки

Анимация хранится в виде PNG-картинок, упакованных в архив /system/media/bootanimation.zip без сжатия. Внутри архива находятся:

  • desc.txt - файл, описывающий анимацию;
  • part0 - папка с файлами анимаций, которые воспроизводятся первыми;
  • part1 - папка с файлами анимаций, которые воспроизводятся вторыми;
  • part? - крайняя папка, изображения с которой воспроизводятся в конце.

Файл desc.txt может содержать нечто вроде

1920 1080 60 p 1 0 part0 p 0 0 part1

Назначение этих строк интуитивно понятно: 1920 × 1080 - разрешение картинки, 60 - число кадров в секунду. Part0 и part1 указывают на папки, из которых будет воспроизводиться анимация, и последовательность воспроизведения. Вообще, может быть как одна часть, так и несколько (три и больше).

Изображения, находящиеся в папках part, пронумерованы пятью цифрами в порядке воспроизведения: 00000.png , 00001.png , 00002.png … Эти изображения можно поменять на свои, тем самым создав оригинальную анимацию. А можно просто удалить файл bootanimation.zip . Тогда девайс будет показывать анимацию из стандартного Android. Или воспользоваться уже готовой коллекцией анимаций на 4PDA .

Изменяем звуковое оформление

Фактически все звуки, которые воспроизводит система, хранятся в папке /system/media/audio . Внутри нее ты найдешь следующие папки:

  • alarms - мелодии будильника;
  • notifications - звуки уведомлений;
  • ringtones - мелодии звонка;
  • ui - системные звуки, например низкий заряд батареи, фокусировка камеры, выбор элементов интерфейса.

В alarms, notifications, ringtones можно накидать сколько угодно любых мелодий. Взять их можно, например, здесь:

  • стандартные мелодии из разных телефонов и смартфонов Nokia ;

И маленький лайфхак: удаление файлов из папки ui приведет не к сбоям и ошибкам, а к исчезновению системных звуков. Поэтому ты можешь легко отключить звук создания снимка с камеры, снятия скриншота, просто потерев содержащие эти звуки файлы (их имена интуитивно понятны).

Добавляем шрифты

Шрифты хранятся в fonts . Найти архивы с файлами шрифтов можно на 4PDA и XDA . Для установки достаточно скопировать с заменой ttf-файлы из архива в папку fonts .

Меняем системные настройки (build.prop)

В образе system есть интересный файлик build.prop , содержащий множество полезной информации о железе устройства и настройках, устанавливаемых по умолчанию, для различных стоковых приложений. Справедливости ради замечу, что это не всегда так. Например, в Gigaset ME и ME Pro build.prop разделен на две части. В одной части содержатся настройки для Gigaset ME, а для ME Pro некоторые строки продублированы, но ключи (название смартфона и так далее) в них другие. Это было сделано, чтобы обеспечить более-менее корректную работоспособность одной и той же прошивки на разных аппаратах.


Build.prop содержит (или может содержать) огромное количество настроек. Некоторые из них ничего не меняют, некоторые улучшают одно за счет ухудшения другого, но есть те, которые действительно полезны:

  • ro.product.model и ro.product.manufacturer - модель смартфона и имя производителя. С помощью замены этих строк можно заставить Play Store думать, будто у тебя другой смартфон, что откроет доступ к большему количеству софта. Для всяких малоизвестных китайских смартфонов эти строчки могут стать спасительными;
  • hw.qemu.mainkeys - принимает только два значения: 0 - показать наэкранные клавиши навигации, 1 - не показывать кнопки. Отсутствие строки соответствует 0;
  • debug.sf.nobootanimation - значение 1 отключает анимацию загрузки, что немного поднимает ее скорость. Установка 0 или удаление строки возвращает анимацию на место;
  • ro.telephony.default_network - говорит системе, в какой режим должна быть переключена мобильная сеть при загрузке;
  • ro.sf.lcd_density - DPI дисплея, наиболее точное значение для дисплея можно посчитать через удобный сайт . Но никто не запрещает поставить и большее или меньшее значение по своему вкусу: более высокие значения делают элементы интерфейса крупнее, низкие - меньше;
  • ro.config.vc_call_vol_steps - количество шагов громкости во время разговора (по умолчанию 8);
  • ro.config.media_vol_steps - количество шагов громкости мультимедиа (по умолчанию 15).

Внедряем в прошивку Google Apps

Почти всегда кастомные прошивки поставляются без сервисов Google и магазина приложений. Разработчики предлагают нам установить их отдельно с помощью пакета GApps. Однако его можно интегрировать прямо в прошивку.

Для начала необходимо скачать пакет GApps. Я рекомендую брать архивы Open GApps . Выбираешь версию Android, архитектуру процессора и вариант комплектации (Pico, Nano, Stock…), который определяет, сколько различных приложений Google содержит архив. Я рекомендую скачать версию Pico. Она содержит только Play Store и набор необходимых для его работы библиотек.

Интеграция GApps в прошивку выполняется так:

  1. Распаковываем ZIP-архив GApps с помощью любого архиватора.
  2. Переходим в папку Core.
  3. Видим множество архивов с расширением.tar.lz . Извлекаем с помощью lzip.
  4. После распаковки копируем файлы из папок в соответствующие папки в system. Что куда кидать, нетрудно догадаться по структуре каталогов в архиве. Например, configupdater (со скриншота) нужно кидать в папку priv-app .
  5. Переходим в папку GApps (находится рядом с Core) и проделываем пункты 3 и 4 для файлов в ней.
  6. Все, мы интегрировали GApps в нашу прошивку!

Свободное место

Необходимо понимать, что место для установки прошивок ограниченно. Нельзя установить прошивку, размер которой перевешивает размер раздела system устройства. Посмотреть его значение можно, используя :

$ adb shell df /system

Второй вариант: поставить на устройство терминал и набрать команду

$ df /system

Размер раздела в байтах можно узнать, установив на смартфон BusyBox и выполнив в терминале команду

$ busybox df -B 1 /system

Или то же самое с помощью ADB:

$ adb shell busybox df -B 1 /system

Место, занимаемое прошивкой, будет приблизительно равно размеру system в распакованном виде. Вообще, при создании прошивки необходимо учитывать, что юзер также может прошить поверх нее различные модификации (SuperSU, Xposed) или перенести приложения в раздел system. Например, минимальный пакет приложений Google (Pico) требует минимум 150 Мбайт дополнительного пространства для установки.

При необходимости размер файла прошивки можно уменьшить, удалив не только ненужные программы из /system/app (/system/priv-app) и звуки вызова из system/media/audio и bootanimation.zip , но и:

  • /system/tts/lang_pico - языки примитивного голосового движка Pico TTS, голосовой движок Google это не затронет;
  • /system/usr/srec/config/ - офлайн-языки. Можно будет скачать потом онлайн, если понадобится.

Сборка

После внесения изменений нужно собрать все обратно. Сначала запакуем раздел system в system.new.dat . Скачиваем нужные нам инструменты:

$ wget https://github.com/xpirt/img2sdat/raw/master/img2sdat.py $ wget https://github.com/xpirt/img2sdat/raw/master/blockimgdiff.py $ wget https://github.com/xpirt/img2sdat/raw/master/common.py $ wget https://github.com/xpirt/img2sdat/raw/master/rangelib.py $ wget https://github.com/xpirt/img2sdat/raw/master/sparse_img.py $ sudo apt-get install android-tools-fsutils

Преобразовываем нашу папку обратно в RAW-образ. Назовем его system_new.img:

$ sudo make_ext4fs -T 0 -S file_contexts -l 1073741824 -a system system_new.img output/

1073741824 меняем на размер раздела system в байтах. Желательно даже сделать его чуть меньше. Делаем из RAW-образа sparse-образ:

$ img2simg system_new.img system_snew.img

Преобразуем наш образ в system.transfer.list и system.new.dat , которые и нужно кидать в архив с прошивкой, но сначала удалим старые файлы:

$ rm -rf system.transfer.list $ rm -rf system.new.dat $ rm -rf system.patch.dat $ chmod +x img2sdat.py $ ./img2sdat.py system_snew.img

Отделим файлы прошивки от лишней шелухи (файлов, которые мы загружали для работы. Для этого удобно пользоваться архивом с прошивкой). Удалили? Теперь нужно запаковать прошивку в ZIP-архив (любым архиватором).

Осталось подписать архив. Сделать это можно как на самом Android с помощью ZipSigner , так и на ПК (потребуется установленная Java):

$ wget https://github.com/appium/sign/raw/master/dist/sign.jar $ java -jar файл.zip

Подводные камни

Во время сборки system.new.dat ты можешь столкнуться с несколькими проблемами, вызванными постоянными изменениями в механизмах формирования прошивок Android. Описанный выше способ должен хорошо сработать в случае основанной на Android 5.1 прошивки, в более новых могут возникнуть сложности, так что потребуется использовать другие версии инструментов сборки. К сожалению, мы не можем описать все нюансы сборки, поэтому, возможно, придется погуглить.

Установка

Для установки кастомной прошивки необходим кастомный рекавери TWRP, позволяющий устанавливать неподписанные или подписанные тестовым ключом прошивки (именно такую мы создали). В журнале мы неоднократно описывали процесс его установки, да и в ветках форума, посвященных твоему устройству, обычно есть достаточно информации для того, чтобы это сделать.

TWRP

Выводы

Эта статья описывает лишь верхушку огромного айсберга под названием «модификация прошивок». «Серьезные» прошивки не только дополняют ядро и саму прошивку со стоковыми приложениями множеством функций (которые зачастую вырваны из других ядер и прошивок), организовывая или даже меняя принципы их взаимодействия, но и вполне могут кардинально менять принципы работы ОС. Правда, такая поделка - это уже не Android, а отдельная ОС, даже если Play-сервисы получится туда поставить (кстати, такие действия, мягко говоря, не поощряются Google). Ну и не забываем: все оболочки от производителей - TouchWiz, ZenUI, HTC Sense и так далее - всего лишь обычные кастомы, максимально привязанные к железу устройства и друг к другу.

Те, кто повседневно пользуются планшетом или смартфоном на основе ОС Android часто хотят получить больший функционал, чем предоставляется при покупке. Для этого нужно получить root права (доступ к полномочиям администратора), установить кастомную прошивку, установить другую загрузочную анимацию и много другого.

Когда пользователь изучает информацию по изменению своего устройства, часто приходится сталкиваться с упоминанием модифицированного рекавери, который обычно именуется ClockworkMod Recovery или TWRP Recovery. Общее понятие о модрекавери и вы можете найти в других статьях, а здесь мы познакомимся поближе с другим известным типом модифицированного заводского меню, а именно - с TWRP Recovery, который разработала команда Teamwin.

До того, как мы коснёмся изучения функций TWRP Recovery более подробно, необходимо заметить, что в сравнении с ClockworkMod имеется ряд особенностей, благодаря которым многие пользователи предпочитают использовать именно TWRP:
- Возможность полноценно использовать тач для управления функциями модрекавери;
- более гибкая настройка ряда опций;
- поддержка установки сразу нескольких zip файлов;
- подробное меню выбора того, что необходимо сохранить в резервных копиях;
- возможность пользоваться S-Pen на планшетофонах Galaxy Note;
- блокировка экрана и спящий режим при помощи кнопки питания.

Руководство пользователя при работе с модрекавери TWRP Recovery
1. Общая информация о TWRP
2. Инсталлирование TWRP Recovery
3. Как попасть в меню TWRP Recovery
4. Подробное рассмотрение основных функций в меню TWRP Recovery
5. Перепрошивка, замена системных файлов, установка обновлений, модификаций на устройства Android при помощи TWRP

Что такое TWRP Recovery

Познакомимся с тем, что собой представляет TWRP Recovery.
В сравнении со стандартным заводским меню, TWRP Recovery отличается гораздо большим количеством доступных пользователю функций. С помощью него можно сохранять полный слепок системы, устанавливать нестандартное ПО, другие прошивки, заменять ядро ОС, восстанавливать систему из резервной копии, доступны и многие другие возможности. TWRP записывается в особый раздел внутренней памяти телефона или планшета, заменяя собой заводское рекавери.
Зачастую, в ряде, на первый взгляд, безвыходных ситуаций, TWRP Recovery может прийти на помощь. Не смотря на то что телефон может перестать загружаться, не редко, воспользовавшись TWRP, можно полностью восстановить работоспособность устройства из резервной копии, сохранив все установки, программы и их настройки.

Приведём краткий перечень основных возможностей TWRP Recovery:
- Установка альтернативных (кастомных) прошивок, или ядер;
- Установка обновлений системы, исправлений, внесение корректив в функции гаджета;
- Создание полной резервной копии системы или отдельных её частей (данных приложений, системного раздела, кэша, настроек);
- Подключение посредством USB шнура к компьютеру в качестве съёмного накопителя;
- Восстановление предыдущего состояния системы из раннее сохранённой резервной копии (бекапа);
- Редактирование разделов на карте памяти (создание, форматирование, удаление);
- Возможность сброса на заводские установки (Wipe - data/factory reset). Можно удалять только часть данных вместо полного сброса к исходному состоянию: удаление статистики батареи (wipe battery stats), очистка кеша (wipe cache), стирание далвик-кеша (wipe Dalvik-cache);
- Использование в качестве терминала для выполнения команд;
- Возможность работать с системными файлами на планшете или телефоне.

Установка TWRP Recovery

Чтобы установить TWRP Recovery на большую часть устройств, много усилий не потребуется. Если инсталлировать с Google Play приложение GooManager, то можно в её меню воспользоваться функцией "Install OpenRecovery Script".

Многие гаджеты на Андроиде, к примеру смартфоны и планшеты Nexus, имеют специально предназначенные программы, как Google Nexus 7 Toolkit, где есть функция установки модифицированного рекавери. Кроме того, воспользовавшись программой adb, можно тоже инсталлировать TWRP Recovery.

Как попасть в TWRP Recovery

Для того, чтобы войти в меню модифицированного рекавери, можно воспользоваться несколькими способами:
1. При помощи нажатия особой комбинации кнопок при включении гаджета. Комбинация может разниться для разных моделей устройств на Андроиде. К примеру, на ряде устройств попасть в рекавери можно, зажав во время включения одновременно клавиши увеличения громкости звуков и кнопки питания.
2. Воспользовавшись специализированной программой, как GooManager иои Titanium Backup, которые позволяют выбрать в своём меню функцию загрузки в режим Recovery, пункт "Reboot Recovery".
3. Если на ПК установлены соответствующие гаджету драйвера и настроено подключение при помощи программы ADB (т.н. ADB shell), то подсоединив к устройству USB провод от компьютера, можно запустить на исполнение команду:

adb reboot recovery

Основные функции и меню TWRP Recovery

Загрузив телефон или планшет в TWRP Recovery, вы первым делом попадёте в главное меню.

В данной инструкции рассматриваются функции и возможности TWRP Recovery версии 2.3.2, которая является наиболее актуальной на момент написания статьи. Другие версии TWRP могут обладать немного другим интерфейсом, однако главный функционал останется таким же как и в рассматриваемой нами версии.

Внешний вид TWRP recovery также может немного отличаться, в зависимости от конкретного устройства и выбранной темы оформления.
Поскольку TWRP recovery поддерживает сенсорное управление, то выбирать нужные пункты меню и перемещаться по ним весьма просто - достаточно, также как и при обычном использовании гаджета, нажимать на нужный нам элемент пальцем.
Если вы хотите вернуться в предыдущее меню, то в каждом подменю находится в нижней (телефон) или верхней правой (планшет) части дисплея кнопка возврата. Также сверху показан процент заряда аккумулятора и текущее время.

Функции основных пунктов меню:
1. Install

Используется для установки прошивок, патчей и модификаций.
Это одна из самых наиболее применяемых функций TWRP Recovery.
Воспользовавшись этой опцией, можно инсталлировать кастомные (неофициальные), официальные прошивки, программы в системный раздел, заменять ядра, изменять бутанимацию, темы оформления и другое. Обновления устанавливаются из файлов, находящихся в любом месте карты памяти устройства, в zip формате.
Выбрав необходимый файл, открывается меню, в котором можно добавить следующее обновление. Таким образом можно составить очередь, по которой будет проходить установка патчей (пункт Add More Zips). После того, как нужные файлы выбраны, нужно начать прошивку, протянув с левой стороны вправо слайдер, который находится в нижней части дисплея.

Функция Zip Signature verifications может активировать проверку цифровой подписи zip файлов.
При помощи пункта Force MD5 check on all Zips активируется проверка устанавливаемых обновлений на соответствие контрольных MD5 сумм.

2. Wipe Меню очистки и удаления данных

В этом разделе есть возможность очищать память телефона, как полностью возвратившись к заводским настройкам (Factory Reset), так и выбрав очищение лишь определённой её части, как системный раздел System, кэш (Cache), или Dalvilк Cache. После применения Factory Reset устройство вернётся к состоянию, в котором пришло с завода.
Кроме этого, есть возможность очистить внутреннюю память (Internal Storage) или внешнюю SD карту (External Storage), очистить папку, где хранятся установленные на внешнем носителе программы (android_secure) или сбросить счётчик статистики батареи (Wipe Battery Stats).
Аналогично другим исполняемым функциям, подтвердить свой выбор можно, воспользовавшись слайдером, который появится в нижней части дисплея. Отменить выполнение задач можно, тапнув по кнопке "Назад".

3. Backup Раздел резервирования данных или системы

Это один из самых важных пунктов в модифицированном рекаверри. Здесь можно сделать резервную копию всей системы телефона или планшета, включая данные приложений и установки устройства - Nandroid Backup.

В этом разделе можно :
- Выбрать части памяти, которые требуется зарезервировать: Data, System, Recovery, Boot, Uboot, Cache, NVram;
- Посмотреть на доступный объём места в памяти (Free Space);
- Выключить создание контрольных сумм в файлах резервов (Skip MD5 generation during backup);
- Активировать сжатие файлов бекапа (Enable Compression);
- Выбрать для сохранения резервных данных внутреннюю память устройства (Use internal storage);
- Выбрать внешнюю карту памяти для сохранения файлов бекапа (Use external SD);
- Обновить информацию по свободной памяти в разделах (Refresh Sizes);
- Установить название для резервной копии (Set Backup name).
Также как и раньше, активировать запуск выбранных вами функций можно при помощи слайдера, после чего будет показан прогресс выполнения операции.

Когда процесс завершится, можно перезагрузить гаджет, воспользовавшись опцией Reboot System, или вернуться в главное меню TWRP, воспользовавшись стрелочкой.

4. Restore Меню восстановления частей или полностью системы из ранее созданной резервной копии

В этом разделе предоставляются следующие возможности :
- выбор внутренней памяти устройства в качестве места, где будет осуществляться поиск резервных копий (Use internal storage);
- установить внешнюю карту памяти как раздел, где рекавери будет искать бекап (Use external SD).
Если вы не меняли настройки при создании бекапа, то по умолчанию имена резервных копий складываются из числа и времени создания. Файлы можно отсортировать следующими способами:
- по возрастанию (Sort Ascending) или убыванию (Sort Descending) даты создания;
- увеличению или уменьшению размера резервных копий.

Когда искомая резервная копия найдена, предоставляется следующий выбор функций :
- отметить те разделы, которые требуется восстановить (Data, System, Recovery, Boot, Uboot, Cache, NVram);
- удалить эту резервную копию (Delete Backup);
- дать другое имя выбранной резервной копии (Rename Backup);
- включить проверку контрольных MD5 сумм в файлах резервных копий.

Начать выполнение выбранной операции, подтвердив выбор, воспользовавшись слайдером внизу экрана.

5. Mount

Здесь вы можете монтировать и размонтировать разделы и совершать операции с ними. При монтировании данные, содержащиеся на разделе становятся доступными.

В этом разделе есть функции :
- Монтирование, размонтирование системного раздела (Mount/Unmount System);
- Монтирование, размонтирование кеш раздела (Mount/Unmount Cache);
- Монтирование, размонтирование раздела данных (Mount/Unmount Data);
- Монтирование, размонтирование внутренней памяти (Mount/Unmount Internal);
- Монтирование, размонтирование внешней карточки памяти (Mount/Unmount Sdcard);
- Подключение устройства к ПК в качестве накопителя (Mount USB storage). Здесь к ПК можно подключить SD карту (Use external SD) или встроенную память гаджета (Use internal storage).

6. Settings Настройки модифицированного рекавери

Здесь задаются установки, которые TWRP Recovery будет использовать по умолчанию при выполнении функций:
- Включить/отключить проверку цифровой подписи устанавливаемых файлов (Zip file signature verification);
- Включить/отключить проверку контрольных сумм для любых файлов формата zip (Force MD5 check for all zips);
- Стирание файлов вместо форматирования во время очистки памяти (Use rm -rf instead of formatting);
- Не учитывать ошибки в размерах файлов, когда проводится резервное копирование (Ignore image size errors during backup);
- Не создавать контрольные суммы во время создания бекапа (Skip MD5 generation during backup);
- Выбрать свою временную зону (Time Zone);
- Вернуться к установкам TWRP Recovery по умолчанию (Restore Defaults).

7. Advanced Дополнительные опции TWRP

Здесь можно :
- Активировать сохранение файла лога операций на карту памяти (Copy Log to SD);
- Вернуть к первоначальному состоянию права доступа на системные папки и файлы, которые могут нарушаться некоторыми приложениями с root привилегиями. Иногда нарушение прав доступа может приводить к сбоям и зависаниям планшета или телефона (Fix Permissions);
- Изменять разделы на карте памяти (создавать, удалять, создавать кэш-файлы swap). Swap обычно применяется для того, чтобы ускорить работу Андроид устройств. (Partition SD Card).
Здесь можно выполнить следующие команды: Copy (копировать файл), Move (переместить файл), Chmod 755 (установить права доступа 755, которые по умолчанию используются для всех системных файлов), Chmod (установить другие права), Delete (удалить файл), Rename File (переименовать файл);
- Выполнить команду, введённую вручную в режиме терминала (так же как с ПК при помощи интерфейса adb Sshell) (Terminal Command).

8. Reboot

С помощью этого пункта можно перезагрузить устройство. Доступные опции :
- перезагрузиться в рабочий режим устройства (System);
- перезагрузиться в рекавери (Recovery);
- выключить планшет или телефон (Power Off).

Перепрошивка, замена системных файлов, установка обновлений, модификаций на устройства Android при помощи TWRP

Для того, чтобы установить другую прошивку или патч, потребуется эти файлы в формате zip скопировать на карту памяти или во внутреннюю память.

Далее выполняем следующее :
1. Загружаемся в TWRP recovery;
2. Выбираем функцию "Install";
3. Выбираем внутреннюю (Use internal storage) или внешнюю память (Use external SD), в зависимости от того куда мы скопировали нужные нам файлы.
4. Находим и выбираем файл, который требуется установить.
5. Если у вас есть файл md5 вместе с Zip, то можно активировать проверку сумм (Force MD5 check on all Zips), в противном случае не делаем этого;
6. Запускаем установку, протянув слайдер слева на право.

Можно выбрать сразу 10 файлов zip, которые последовательно будут установлены. По окончании процесса установка выполнена.
Когда процесс завершится рекомендуется очистить кеш и dalvik кеш.

Здравствуй Хабр!

Несколько лет назад, когда я впервые познакомился с Android, я услышал от своего коллеги по работе, что Android предусматривает возможность установки модифицированных или самодельных прошивок. Признаться, тогда я был далек от этого. И даже пол года назад меня едва интересовали подобные вещи. Глубоко в душе, я был уверен: то, что делает производитель, уже предназначено для нормального использования.

Каково же было мое разочарование, когда я приобрел телефон из поднебесной, где заводскими настройками было запрещено использование Google, Skype, Facebook и других приложений. В принципе, на некоторые вещи можно было закрыть глаза, но когда мой телефон не подразумевал использование учетной записи Google - я взял с себя обещания обязательно разобраться во что бы мне это не стало.

Прошло пол года и мои кастомные прошивки с успехом используются по всему миру.

В данной серии статей пойдет речь о том, как делать reverse программирование для Android, реализовывать патчи, твики и моды.

Преамбула

И так! Давайте сперва определимся с понятиями, которые будут использоваться в данной статье. Ваше привычное понимание, при этом, может сильно отличаться.

Патч - изменение или замена существующего программного кода с целью модификации алгоритма программы.
Мод - как правило, добавление дополнительного функционала в существующий программный код без изменения алгоритма.
Твик - усовершенствование функционала программы с целью облегчения доступа к параметрам системы.

Также хочу заметить, что все примеры будет взяты для телефона HTC, но это не значит, что данная информация не может быть использована на других телефонах.

Подготовка среды

Обойдусь без подробных инструкций как пользоваться тем или иным программным обеспечением. Если вам интересна данная статья и вы дочитали до этих строк, то я надеюсь, что вы уже опытный пользователь и имеете опыт использования, ну или хотя бы экспериментирования в данной области. Инструкций, статей и результатов тестирования полно в открытом доступе, впрочем, как и на Хабре. Также обойдусь без описания некоторых терминов, иначе статья получится очень большой и нудной. Будем писать только по делу. Уверен, что среда у вас уже давно стоит. Если нет, то предлагаю скачать и установить.

1 . Android SDK . Это среда разработки приложений для Андроид. Для того чтобы делать модификации, нам обязательно придется проверять наш программный код. Среда разработки самое лучшее, что мы можем использовать.
2 . Android Kitchen . Данная утилита позволит вам работать с образами системных партиций официальной ну или неофициальной прошивки.
3 . JD-GUI . Декомпилятор программного кода языка Java. Сразу отмечу, что это самый лучший декомпилятор в плане удобства использования.
4 . DJ Java Decompiler . Еще один декомпилятор, или дизассемблер, как некоторые любят называть, программного кода языка Java. Не удобен в плане использования, но разбирает код, который иногда не понимает JD-GUI.
5 . smali . Еще один дизассемблер, но уже dalvik кода. smali нужен для дизассемблирования, а backsmali ассемблирования кода.
6 . dex2jar . Утилита для конвертации исполняемых файлов Dalvik кода.

Преобразование прошивки

Разумеется, прошивка, которая стоит у вас на телефон от производителя оптимизирована с целью сокращения энергопотребления. Для того чтобы прошивку можно было изменять, ее необходимо преобразовать в формат, позволяющий изменять код. Для этого используется Android Kitchen. Можно конечно и руками, как я и делал раньше, пока не нашел эту самую «кухню». Как вытаскивать системную область из телефона, устанавливать среду, делать DEODEX прошивки, вы можете прочитать в интернете. Если вам уже ничего не понятно, я думаю стоит повременить со статьей, пока вы не наберете достаточно опыта.

После того, как прошивка из оптимизированного вида (ODEX - оптимизированный dalvik исполняемый код, если мне не изменяет память) стала DEODEX (то бишь НЕ оптимизированной), все исполняемые файлы готовы к модификации.

Непосредственно модификации

Создание патчей
Как я уже и рассказывал, мой телефон изначально имел запрет на использование Google. Ну хоть ты тресни, на Playstore не зайти, учетную запись не настроить, телефонная книга толком не синхронизируется. Зачем нужен такой Android? Долго копаясь в логах (logcat) самого устройства, я нашел записи, которые говорили о том, что использование Google запрещено. Самое не удобное в Android, вы видите лог, но не знаете какое системное приложение его производит. Чтобы отыскать от куда ноги растут, мне пришлось распотрошить все системные приложения до дизассемблированного Java кода. Это заняло достаточно времени, но я до сих пор пользуюсь проделанной работой при анализе и поиске нужного кода. Этапы получения подобного инструментария следующие:
1 . Сделать DEODEX всей прошивки
2 . Вашу новую DEODEX прошивку надо будет собрать и прошить на телефон. Как это делается - тема другой статьи.
3 . Из каждого файла, находящегося в /system/framework вытащить файл classes.dex и переконвертировать в JAR посредством dex2jar.
4 . Каждый полученный JAR открыть в JD-GUI и пере-сохранить в исходный код
5 . Распаковать исходный код из архива.

В итоге у меня получилось столько папок, сколько было JAR файлов в /system/framework, и каждая папка имела структуру исходных кодов Java.
Путем несложных манипуляций, я быстро отыскал то место, которое генерировало записи в logcat.

Не будем рассматривать всю логику запрета, так как для каждого случая это отдельная история. Мне пришлось потратить пару часов, прежде чем я нашел где производятся проверки, построить в голове блок схему алгоритма и понять куда надо лезть, чтобы алгоритм чуть чуть «попортить».

Оказалось все просто. Есть подпрограмма, которая на основе заранее установленных констант, при обращении отвечала, относится ли телефон к Китаю или же нет.

Код находился в файле HTCExtension.jar , а класс, который содержал данную подпрограмму находился в

Распаковка и анализ оригинального файла
1 . Сперва нам надо взять оригинальный DEODEX JAR файл, который отвечает за нужную нам часть кода. В нашем случае HTCExtension.jar .
2 . Открыть любым архиватором и вытащить от туда classes.dex
3 . С помощью конвертера dex2jar преобразовать его в JAR файл. Команда: dex2jar.bat classes.dex
4 . Открыть полученный classes_dex2jar.jar файл в JD-GUI.
5 . Да, чаще всего JD-GUI декомпилирует код не так как он выглядит в оригинале, оно и понятно, но читать вполне можно. В исходнике мы видим, что подпрограмма проверяет параметры проекта и языковой флаг прошивки. В нашем прискорбном случае возвращается значение TRUE.
public static boolean isChina() { if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23)); while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27)) return true; return false; }
6 . Чтобы сделать патч, нам надо дизассемблировать сам Dalvik код. Для этого используем baksmali. Удобнее всего создать отдельную папку и положить туда три файла вместе: HTCExtension.jar , smali.jar и baksmali.jar . Даем команду java -Xmx512m -jar baksmali.jar -a -d -o HTCExtension -x HTCExtension.jar

Это API вашей версии Android. Для JB - это 16
- папка, где находятся все фреймворки прошивки.

В моем случае это была команда
java -Xmx512m -jar baksmali.jar -a 16 -d S:\dev\Android\Android-Kitchen\WORKING_JB_15\system\framework -o HTCExtension -x HTCExtension.jar
7 . В нашей вновь созданной папке появилась папка HTCExtension, а в ней наши файлы с Dalvik кодом.
8 . Отыскиваем файл по пути \com\htc\util\contacts\BuildUtils$Customization.java и смотрим код:
.method public static isChina()Z .registers 3 .prologue const/4 v0, 0x1 .line 276 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0xd8 if-eq v1, v2, :cond_13 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0xda if-eq v1, v2, :cond_13 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0x17 if-ne v1, v2, :cond_14 .line 297:cond_13:goto_13 return v0 .line 283:cond_14 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S if-ne v1, v0, :cond_1d .line 285 const/4 v1, 0x2 sget-short v2, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_LANGUAGE_flag:S if-eq v1, v2, :cond_13 .line 291:cond_1d sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0x1b if-eq v1, v2, :cond_13 .line 297 const/4 v0, 0x0 goto:goto_13 .end method
9 . Страшно, не правда ли? Ничего же не понятно. Но, это дело поправимое. Создав несколько своих патчей и набив тем самым руку, вы легко сможете модифицировать код без сторонних средств. В нашем случае, в этом коде
.prologue const/4 v0, 0x1 происходит присваивание переменной v0 значение 1, то есть TRUE. Далее идут всякие проверки, и если телефон не китайский, то значение переменной изменяется:
.line 297 const/4 v0, 0x0 goto:goto_13
10 . Самый простой способ спасти отца русской демократии, это изменить код на следующий:
.prologue const/4 v0, 0x0 , то есть поменять значение переменной с 1 на 0. То есть что бы ни было, всегда бы возвращалось значение FALSE и в JD-GUI код выглядел бы как public static boolean isChina() { if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23)); while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27)) return false; return false; }
11 . Да, метод,будет работать. Но мы же не ищем легких путей - это раз. Во-вторых не совсем красиво. Хочется кода что-то вроде
public static boolean isChina() { return false; }
12 . А как нам получить Dalvik код данного исходного кода? Для новичков мы сделаем небольшой трюк.

Создание Dalvik кода
1 . Открываем Android SDK.
2 . Создаем новый проект, и в наш единственный тестовый класс пишем следующий код
package ru.habrahabr.test; public class test { public static boolean isChina() { return false; } }
3 . Компилируем наш проект и затем берем собранное приложение из рабочей области.
4 . Кладем собранное приложение в папку, где мы с вами потрошили JAR файл.
5 . Даем команду java -Xmx512m -jar baksmali.jar -a -d -o test -x test .apk
6 . Мы дизассемблировали только что собранное приложение в Dalvik код.
7 . Открываем наш файлик test.smali и видим там код
.method public static isChina()Z .registers 1 .prologue .line 7 const/4 v0, 0x0 return v0 .end method
8 . Все, код для патчинга готов.
Накатывание патча
1 . Dalvik код замусорен маркерами, указывающими строку кода в оригинальном исходном файле. Это нужно при выводе ошибок, если таковые имеются в вашей программе. Без указаний строк код также прекрасно работает.
2 . Удаляем строки с нумерацией строк, копируем и заменяем метод (подпрограмму) в нашем \com\htc\util\contacts\BuildUtils$Customization.java файле.
.method public static isChina()Z .registers 1 .prologue const/4 v0, 0x0 return v0 .end method
3 . Сохраняем файл. Да, забыл сказать, редактор нужен нормальный, например Notepad++ или EditPlus. Кому какой нравится.
Компиляция и сборка патченного JAR файла
1 . С помощью backsmali мы распотрошили наш JAR файл, а теперь его надо собрать обратно.
2 . Даем команду java -Xmx512m -jar smali.jar -a 16 HTCExtension -o classes.dex
3 . В нашей папочке появляется файлик classes.dex
4 . Снова открываем HTCExtension.jar файл архиватором и заменяем в нем существующий classes.dex на наш только что созданный.
5 . Все, наш HTCExtension.jar содержит модифицированный программный код.
Замена оригинального файла на патченный
Обычно, для рядовых пользователей создаются специальные скрипты, которые через recovery заменяются. Но нам такое не интересно. Во-первых долго и нудно, во-вторых мы же опытные пользователи и можем себе позволить некоторые тонкости.

1 . Заменить текущий рабочий файл можно следующими командами, если у вас уже стоит DEODEX прошивка и имеется root доступ:

Adb push HTCExtension.jar /sdcard/HTCExtension.jar adb shell su mount -o remount -rw /system dd if=/system/framework/HTCExtension.jar of=/system/framework/HTCExtension.jar.back dd if=/sdcard/HTCExtension.jar of=/system/framework/HTCExtension.jar chmod 644 /system/framework/HTCExtension.jar rm /data/dalvik-cache/system@[email protected]@classes.dex reboot

1-ая команда закидывает патченный файл на флешку
2-ая команда открывает shell
3-ая команда дает root доступ
4-ая команда монтирует систему в режим чтения/записи
5-ая команда делает резервную копию файла
6-ая команда перезаписывает существующий файл новым патченным.
7-ая команда настраивает разрешения
8-ая команда удаляет кэш
9-ая команда делает перезагрузку устройства.

2 . Спасибо что дочитали до этого пункта, осталось немного.
3 . После перезагрузки ваш новый патченный код вступит в силу.
4 . Если код не работает или выскакивает ошибка, то путем не хитрых комбинаций можно вернуть назад резервную копию.
adb shell su mount -o remount -rw /system dd if=/system/framework/HTCExtension.jar.back of=/system/framework/HTCExtension.jar rm /data/dalvik-cache/system@[email protected]@classes.dex reboot

Эпилог

Да, кому-то показалось данная статья слишком специфичной, кому-то мало-понятной, а кому-то бесполезной. Я специально обошелся без углубленной детализации и иллюстраций как это все выглядит в живую и на практике. Во-первых, данный труд будет неблагодарный и только породить еще больше вопросов. Во-вторых, не хочу видеть армию пользователей на форумах, которые жалуются, что убили свой телефон.

К следующей статье я расскажу как делать Твики. Будет пример использования автоматической записи телефонных звонков родными средствами телефона. Спасибо за ваше внимание.

P.S. Если что-то не понятно или смущает, задавайте вопросы - всегда буду рад ответить и пояснить.