Как менять андроид под себя

Модификация стоковых прошивок для 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. Распаковать исходный код из архива.

Читайте также:  Клавиатура для андроида iphone

В итоге у меня получилось столько папок, сколько было 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-ая команда делает перезагрузку устройства.

Читайте также:  Как сделать scroll android studio

2. Спасибо что дочитали до этого пункта, осталось немного.
3. После перезагрузки ваш новый патченный код вступит в силу.
4. Если код не работает или выскакивает ошибка, то путем не хитрых комбинаций можно вернуть назад резервную копию.

Эпилог

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

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

Источник

Измени меня полностью! Кастомизируем интерфейс Android до неузнаваемости

Содержание статьи

Android в своем стандартном виде выглядит бедно. Да, все необходимые функции вроде бы есть, а включить показ процентов батареи до сих пор нельзя. Есть красивая анимация загрузки, но толку от нЧее — ноль. Поддержки тем как не было, так и нет. И что теперь — ставить очередной кастом, завтрашняя ночная сборка которого обязательно заглючит? Нет, мы все сделаем сами, имея только root!

Подготовительные шаги

Для выполнения многих описанных в статье трюков нужен root и зависящий от него Xposed Framework. В стандартном варианте он будет на 100% корректно работать только в AOSP-прошивках, но даже в них могут встретиться глюки. Проблемы с Xposed-модулями часто могут возникать в стоковых прошивках с модификациями от производителя, но для них есть специальная версия Xposed: для TouchWiz, для MIUI, для прошивок на базе Android 5.0+. Владельцы HTC могут устанавливать официальную сборку, но почти всегда требуется S-OFF.

Получил root, установил Xposed? Тогда поехали.

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

Анимация загрузки хранится в файле /system/media/bootanimation.zip. Внутри содержится текстовый документ desc.txt, в нем указаны частота смены кадров, разрешение по горизонтали и вертикали и прочее. Там же лежат сами изображения (кадры), которые меняются с частотой, указанной в desc.txt. Порядок и правила воспроизведения анимации из папок тоже прописаны в этом файле.

Все, что тебе нужно сделать, — достать архив с устройства при помощи файлового менеджера с поддержкой root, распаковать и заменить изображения, не забыв их предварительно пережать в нужном разрешении. Далее достаточно запаковать архив без сжатия и вернуть на место. Но, конечно же, проще взять уже готовый архив. На сайте hboot.co.uk таких полно.

С другой стороны, смотреть на анимацию хоть и интересно, но смысла никакого. А вот видеть, какие службы запускаются, бывает полезно. Самый простой вариант — установить LiveBoot, который выводит logcat и dmesg, то есть сообщения Android и ядра Linux.

LiveBoot

Xakep #210. Краткий экскурс в Ethereum

Добавляем свои звуки в стандартный набор

Звуки можно скидывать в одну из папок в /system/media/audio:

  • alarms — мелодии для будильника;
  • notifications — звуки для уведомлений;
  • ringtones — мелодии звонка;
  • ui — системные звуки, например низкий заряд батареи, фокусировка камеры, выбор элементов интерфейса. Некоторые приложения могут обращаться к ним по умолчанию, следовательно, их можно заменить на свои.

Зачем складывать мелодии в системный раздел? Во-первых, файлы там способны выдержать общий сброс к заводским настройкам; во-вторых, звуки из специальных папок можно поставить на сигнал (звук будильника, звонок, получение СМС) практически в любом приложении.

Меняем шрифты

В полезности этих действий я очень и очень сомневаюсь, потому что стандартный шрифт Android почти идеален. Но на вкус и цвет.

Для установки шрифтов можно использовать специальное приложение. Например, HiFont позволяет без root менять шрифты в прошивках Samsung, HTC, Motorola, Lenovo, Huawei, Nokia X. А если есть root, то и во всех остальных устройствах. Можно как использовать уже имеющиеся в каталоге приложения шрифты, так и добавить свои.

Но где их брать? Есть три варианта:

  • шрифты, выдранные из разных прошивок Android-устройств, можно найти в посте на 4PDA;
  • на 4PDA же есть неплохая коллекция шрифтов, созданных пользователями, в соседнем посте;
  • коллекция на XDA.

Кастомизатору на заметку

Установить шрифты можно и без использования специального приложения. Берем из архива файлы .ttf, кидаем их с заменой в /system/fonts/* (нужен root) и перезагружаем устройство.

Меняем иконки

Иконки можно менять с помощью специальных приложений, например Unicon — Icon Themer. После установки необходимо активировать приложение в настройках Xposed (он сам тебя уведомит). Далее перезагружаем смартфон и открываем приложение. Осталось нажать на Download themes from Google Play и выбрать пакет иконок, установить его и перезагрузить смартфон. Но стоит учитывать, что иконки не меняются в некоторых лаунчерах, например Google Старт.

Теперь иконки будут выглядеть так

Добавляем поддержку тем

В этом поможет Xposed-модуль HKThemeManager. Он позволяет применять темы для CyanogenMod на девайсах со стоковыми прошивками. Причем неподдерживаемые темы можно переделать с помощью apktool специально для этой программы. Переделка достаточно сложна, так что гораздо проще воспользоваться уже готовой коллекцией на 4PDA.

Читайте также:  Лучшие клиенты вконтакте для андроид

Перед установкой темы HKThemeManager покажет весь список приложений, к которым будет применена тема. Убираем галочки с тех, что не нужны, нажимаем на «Применить тему» и перезагружаем устройство.

Выбираем, что хотим изменить с помощью темы

Есть и альтернативный вариант установки тем — приложение Layers Manager. Оно работает в любой прошивке на Android 5.0+ благодаря появлению механизма переназначения ресурсов RRO. База тем у приложения огромна и находится на Play Market. Чтобы посмотреть ее, достаточно набрать в поиске Layers Theme.

Имей в виду, что приложение не работает на прошивках, основанных на CyanogenMod: тамошний движок и RRO конфликтуют.

Превращаем Android 5.X+ в Android N

В этом нам поможет модуль Android N-ify. После установки появятся следующие фишки из Android N:

  • дизайн панели уведомлений заметно преобразится. Появится панель быстрых настроек;
  • в настройках под некоторыми пунктами возникнут интересные надписи. К примеру, под Wi-Fi будет написано название текущей точки доступа, под пунктом «Батарея» — оставшееся время работы и заряд аккумулятора в процентах;
  • в меню «О телефоне» поменяется пасхалка;
  • появится быстрое переключение между двумя последними запущенными приложениями с помощью двойного нажатия на кнопку «Недавние».

Есть у Android N-ify и полезные настройки, через которые можно не только отключить, но и настроить отдельные вносимые изменения.

Панель уведомлений В настройках теперь много полезной информации

Улучшаем строку состояния

Для меня строка состояния в стоковом Android — самая недоработанная штука. К счастью, с помощью Xposed можно многое изменить и сделать ее более удобной.

Меняем индикатор батареи

Battery Home Icon устанавливает индикатор батареи вместо кнопки «Домой». Причем этот индикатор хорошо поддается настройке: можно менять цвета, включать/отключать показ процентов, анимацию зарядки и так далее.

XbatteryThemer — настройка значка батареи. Присутствует много различных тем, как обычных, так и очень неординарных.

Battery Home Icon

Выводим скорость интернет-соединения

Network Speed Indicator — индикатор скорости сети. Умеет показывать скорость мобильных сетей, Wi-Fi, Bluetooth, Ethernet. Настраивается все — от единиц измерения и порога скорости до цвета и размера шрифта. Также можно добавить в строку состояния количество использованного интернет-трафика с помощью DataUsage. Данные показываются те же, что и в разделе настроек «Передача данных».

Выводим реальный уровень сигнала

Иногда нужно знать, насколько хорошо ловит интернет в разных частях комнаты, как влияет положение смартфона на уровень приема сигнала, или просто необходимо сравнить уровень приема сигнала твоего смартфона и других моделей. В этом поможет NetStrength. Модуль умеет выводить уровень сигнала сотовой сети в децибелах к милливатту (дБм или dBm). Эта единица измерения имеет отрицательное значение, и чем оно ближе к нулю, тем лучше прием. Можно также включить показ ASU (Arbitrary Strength Unit — отношение сигнал/шум в пилотном канале). Вычисляется по формуле ASU = (dBm + 113)/2.

Кстати, модуль умеет показывать уровень приема Wi-Fi в dBm, Mbps (Мбит/с — мегабит в секунду) и процентах.

Следим за процессом загрузки

Statusbar Download Progress — один из самых полезных модулей Xposed. Он выводит процесс загрузки из Play Market или файла из интернета в виде тонкой белой полосы над строкой состояния. Сразу рекомендую активировать «Режим бога», благодаря которому прогресс будет отображаться для любых приложений, имеющих индикатор выполнения. В настройках можно поставить отображение над строкой состояния или под строкой.

Меняем часы

Тут поможет модуль X MoreTimeText. В нем огромное количество настроек: цвет и размер часов, их расположение (по центру или справа), вывод текущей даты (причем можно тонко настроить, что и как отображать).

Модифицируем панель навигации

Есть два интересных приложения. Первое — Xperia/AOSP NavBar Buttons. С его помощью можно увеличить количество кнопок и поменять их расположение. Второй — Xtended NavBar. Кнопки три, но теперь панелей несколько, и переключаются они свайпом. На каждую из этих панелей по вкусу можно добавить управление системой, музыкой или же запуск приложений.

Так будет выглядеть строка после включения части модулей

Еще несколько модов

  • Roundr — Round Screen Corners — закругляет углы почти во всех приложениях.
  • Phab7 — переключает интерфейс в режим телефона и планшета без перезагрузки (совместим только с Android 4.3 и ниже).
  • ScreenOffAnimation — позволяет менять анимацию выключения экрана.

Закругленные углы

Модифицируем стоковую прошивку

  • HTC Sense 6–8: Sense Toolbox, HTC One Tweaker;
  • Motorola: MotoGuide;
  • Samsung TouchWiz: XTouchWiz;
  • Asus ZenUI: SuperPOXy.

Также стоит упомянуть о том, что в смартфонах Sony режим SuperiorAuto можно использовать с разрешением в 20 МП и более. Для этого достаточно установить 20MP SuperiorAuto.

Заключение

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

Источник

Оцените статью