- Модификация стоковых прошивок для Android. Часть 1
- Преамбула
- Подготовка среды
- Преобразование прошивки
- Непосредственно модификации
- Эпилог
- Новая жизнь старого android-устройства: устанавливаем CyanogenMod 13
- Оглавление
- Вступление
- реклама
- «Устаревшее» устройство
- реклама
- Выбор прошивки
- Загрузка прошивки
- реклама
- Установка Recovery
- реклама
- реклама
- Установка прошивки
- реклама
- реклама
Модификация стоковых прошивок для Android. Часть 1
Несколько лет назад, когда я впервые познакомился с 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, а класс, который содержал данную подпрограмму находился в \com\htc\util\contacts\BuildUtils$Customization.java
Распаковка и анализ оригинального файла
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.
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 и смотрим код:
9. Страшно, не правда ли? Ничего же не понятно. Но, это дело поправимое. Создав несколько своих патчей и набив тем самым руку, вы легко сможете модифицировать код без сторонних средств. В нашем случае, в этом коде
происходит присваивание переменной v0 значение 1, то есть TRUE. Далее идут всякие проверки, и если телефон не китайский, то значение переменной изменяется:
10. Самый простой способ спасти отца русской демократии, это изменить код на следующий:
, то есть поменять значение переменной с 1 на 0. То есть что бы ни было, всегда бы возвращалось значение FALSE и в JD-GUI код выглядел бы как
11. Да, метод ,будет работать. Но мы же не ищем легких путей — это раз. Во-вторых не совсем красиво. Хочется кода что-то вроде
12. А как нам получить Dalvik код данного исходного кода? Для новичков мы сделаем небольшой трюк.
Создание Dalvik кода
1. Открываем Android SDK.
2. Создаем новый проект, и в наш единственный тестовый класс пишем следующий код
3. Компилируем наш проект и затем берем собранное приложение из рабочей области.
4. Кладем собранное приложение в папку, где мы с вами потрошили JAR файл.
5. Даем команду
8. Все, код для патчинга готов.
Накатывание патча
1. Dalvik код замусорен маркерами, указывающими строку кода в оригинальном исходном файле. Это нужно при выводе ошибок, если таковые имеются в вашей программе. Без указаний строк код также прекрасно работает.
2. Удаляем строки с нумерацией строк, копируем и заменяем метод (подпрограмму) в нашем \com\htc\util\contacts\BuildUtils$Customization.java файле.
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 доступ:
1-ая команда закидывает патченный файл на флешку
2-ая команда открывает shell
3-ая команда дает root доступ
4-ая команда монтирует систему в режим чтения/записи
5-ая команда делает резервную копию файла
6-ая команда перезаписывает существующий файл новым патченным.
7-ая команда настраивает разрешения
8-ая команда удаляет кэш
9-ая команда делает перезагрузку устройства.
2. Спасибо что дочитали до этого пункта, осталось немного.
3. После перезагрузки ваш новый патченный код вступит в силу.
4. Если код не работает или выскакивает ошибка, то путем не хитрых комбинаций можно вернуть назад резервную копию.
Эпилог
Да, кому-то показалось данная статья слишком специфичной, кому-то мало-понятной, а кому-то бесполезной. Я специально обошелся без углубленной детализации и иллюстраций как это все выглядит в живую и на практике. Во-первых, данный труд будет неблагодарный и только породить еще больше вопросов. Во-вторых, не хочу видеть армию пользователей на форумах, которые жалуются, что убили свой телефон.
К следующей статье я расскажу как делать Твики. Будет пример использования автоматической записи телефонных звонков родными средствами телефона. Спасибо за ваше внимание.
Источник
Новая жизнь старого android-устройства: устанавливаем CyanogenMod 13
Оглавление
Вступление
Современные мобильные устройства чрезвычайно быстро стареют. Еще два-три года назад ты копил на желаемый гаджет, а он, не просуществовав и пары лет, уже устарел и не поддерживается производителем. Но если модель популярная, печалиться не стоит, поскольку народные умельцы не дремлют, занимаясь разработкой неофициальных проектов на базе ОС Android.
реклама
В данной статье мы ознакомимся с процессом выбора кастомных прошивок, узнаем, где искать образы и как устанавливать. Ну а в конце выясним, стоит ли все это делать.
В качестве подопытного выступит планшет Samsung Galaxy Tab 2 7.0 (процессор TI Omap 4430, 2 x 1200 МГц, видеосопроцессор PowerVR 540 384 МГц, 1 Гбайт ОЗУ) с неофициальной прошивкой CyanogenMod 13.
«Устаревшее» устройство
В моем личном использовании находится планшет Samsung Galaxy Tab 2 7.0, который вышел в начале далекого 2012 года, когда курс доллара был менее 30 рублей, но речь сейчас не об этом. Данный аппарат построен на базе шустрого двухъядерного процессора Ti Omap, оснащен сочным PLS дисплеем и качественным корпусом.
Планшетом я активно пользуюсь на протяжении четырех лет, проблем с ним никаких не испытываю, и в целом он меня устраивает. А в сравнении с актуальными моделями аналогичного ценового диапазона все вообще шикарно (без какого-либо сарказма). Правда, есть у него один недостаток – устаревшее программное обеспечение.
OC Android ICS и Jelly Bean, которые поддерживаются Samsung Galaxy Tab 2 7.0, уже порядком заросли бородой. Ведь сейчас актуальна версия Android M. А нам хотя бы Android Lollipop, в котором проведена оптимизация производительности, улучшен уровень автономности и есть все новые фишки. В лучшем случае можно разинуть роток на Android Marshmallow…
реклама
Но установить новую версию операционной системы Android на старое устройство все-таки можно, в том числе даже вышеупомянутую Android M.
Выбор прошивки
Для начала следует определиться с выбором прошивки и узнать, а есть ли вообще неофициальные версии системы для нашего аппарата? Владельцам флагманских смартфонов и планшетов (таких как Google Nexus, Samsung Galaxy S, HTC One, Sony Xperia Z и других) не стоит и переживать – прошивки есть, причем в огромном количестве.
В то же время для обычных «китайцев» и моделей брендов второго-третьего эшелонов сторонние прошивки бывают редко, что связано не только с популярностью, но и с ограничениями производителей, как, к примеру, у Xiaomi.
Открываем поисковик, находим любой форум по нашему устройству и изучаем, что же нам могут предложить умельцы. Всякого рода самоделками и портами с других моделей обольщаться не следует, так как ничего хорошего от подобных образов ждать не стоит.
Лучше смотрите на официальные сборки прошивок таких гигантов, как CM, AOSP, Google Play Edition и Miui. Чуть менее серьезно воспринимайте ColorOS и прочие. Узнать о плюсах и минусах, а также различиях каждой из систем можно в интернете, поскольку в рамки одной статьи уместить это сложно.
В нашем случае выбор остановился на версии CyanogenMod 13, которая базируется на OC Android 6.0. На мой взгляд, совсем неплохо. Как описывают на форумах, прошивка стабильная и, что немаловажно, полностью рабочая. Это мы и проверим.
Загрузка прошивки
Найти образ прошивки можно на официальном сайте производителей прошивок, либо в соответствующей теме разработчиков на форуме XDA Developers. Уже прошли те времена, когда все файлы выкладывались на закрытые форумы, файлообменники и черт те что какие ресурсы. Теперь все открыто, наглядно и практически официально.
реклама
В нашем случае мы открываем сайт CyanogenMod, где выбираем в левой панели соответствующую модель устройства и переходим к загрузке. Будьте аккуратны, поскольку у некоторых смартфонов и планшетов в зависимости от модификации бывают отличия в плане процессоров и внутренних компонентов, например, наличие или отсутствие ИК-порта, 3G/4G-модуля и прочих преимуществ. В нашем случае P3110 и P3100 это разные версии!
Установка несоответствующей версии прошивки грозит проблемами с системным разделом, поможет только «прямая» перешивка, то есть в сервисном центре. А в худшем случае нам придется думать о более сложных модификациях.
Установка Recovery
реклама
Любое современное мобильное устройство содержит специальный режим загрузки, который называется Recovery. Он позволяет восстанавливать устройство, устанавливать обновления, делать резервные копии и элементарные операции с мобильным «железом». Мы же будем устанавливать неофициальное обновление, по этой причине нам необходимо модифицированное Recovery.
Для OC Android существуют два варианта: CWM (или Philz) и TWRP Recovery. В чем различия между этими тремя режимами? На вкус и цвет товарищей нет! Все они предлагают примерно одинаковую функциональность, но разрабатываются разными группами разработчиков и отличаются различными нюансами.
К примеру, TWRP позволяет открыть доступ к съемному носителю при подключении через USB, а еще предлагает расширенные параметры подключения по ADB и дополнительные возможности сжатия «бэкапа» системы. А Philz Recovery построен на базе TWRP и отличен от него интерфейсом и парой мелочей. В то время как ClockworkMod Recovery более стабилен и обладает большим списком поддерживаемых устройств.
Однако выбор есть не всегда. Для каждого устройства разрабатывается отдельное Recovery и бывает так, что выбора у пользователей нет. В моем случае выбор пал на TWRP Recovery версии 2.8.7.0. Установка данного режима может осуществляться различными способами, начиная от официального Recovery, Fastboot и заканчивая программами и утилитами для конкретных моделей.
реклама
Загружаем утилиту GooManager, выбираем в дополнительном меню пункт «Install OpenRecovery Script» и ожидаем чуда. Предварительно необходимо получить ROOT права и включить режим отладки в параметрах для разработчиков.
Для проверки установки Recovery необходимо одновременно зажать следующую комбинацию клавиш: «включение» и «увеличение громкости». А на некоторых устройствах еще и кнопку «дом» требуется прибавить. Подробности о каждом конкретном случае можно узнать на форумах.
Установка прошивки
Если процесс установки модифицированного режима восстановления был успешен, можно перейти к следующему – установке прошивки. Для начала необходимо зарядить устройство более чем на 60%, а еще лучше на все 100%. В противном случае мы обречены на фатальный результат. Затем загруженный образ необходимо переместить в память смартфона, будь то съемный накопитель или внутренняя память, и уже оттуда загрузиться в режиме Recovery и установить прошивку. Все гениально просто, осталось только повторить.
реклама
Берем в руки устройство, запускаем его комбинацией клавиш «включение» и «увеличение громкости», попадаем в системное меню.
Желательно сделать полный «бэкап» системы на флэш-карту!
Далее необходимо сделать очистку данных, посетив пункт с названием Wipe и выбрав параметр Advanced Wipe. Это необходимо выполнить для нормального функционирования новых компонентов. Особенно это важно при установке прошивки нового типа или повышении версии системы.
реклама
Вот теперь мы устанавливаем прошивку. Переходим на главное меню, выбираем Install, далее находим загруженный пакет и нажимаем роковую клавишу. После чего нам остается только ждать и надеяться на успешное завершение процесса.
К слову, установка или обновление прошивки может занимать до 10-15 минут, поскольку все зависит от компонентов устройства и устанавливаемой системы. Если процесс затянулся – значит, что-то пошло не так… В нашем случае процесс успешно завершился за 4 минуты. В это время на экране будут описываться стадии установки. Жаль только, возможность создания скриншотов отсутствует.
После всех совершенных манипуляций гаджет предложит загрузить систему, либо продолжить установку компонентов. Можно сразу перейти к установке необходимых патчей или GAAPS. Однако предварительно рекомендуется сделать «чистый запуск», чтобы кратко ознакомиться с системой и ее работоспособностью. Вдруг она нам не понравится, и мы решим откатиться назад или переустановить ее.
Источник