Как из готовой прошивки собрать свою. Android, мод прошивка своими руками

Одной из самых популярных, если не сказать популярнейшей операционной системой для мобильных устройств, будь то смартфоны, планшеты или другие девайсы, несомненно, является Android. Мобильных гаджетов работающего на основе данного программного обеспечения существует великое множество, и еще больше – версий прошивок, как официальных от производителя, так и неофициальных, собранных любителями или поклонниками того или иного устройства. Но бывает, случается так, что та или иная прошивка не устраивает. Причины могут быть самыми разными, от быстродействия до интерфейса, и много других мелких нюансов. Что же делать в таком случае? Создать прошивку самостоятельно!

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

Создать Андроид прошивку

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

После посещения Android Kitchen можно выбрать, что нужно поменять – индикатор батареи, системные иконки, строку состояния, различные анимации, диалоговое окно изменения громкости, разделители и полосу прогресса, экран блокировки, шрифты. Выбирая те или иные функции на «кухне», можно сразу же, в реальном времени провести предварительный просмотр сделанных изменений, чтобы оценить их. После того, как все нужные изменения были произведены, переходим на вкладку File Upload. Здесь доступны некоторые настройки, однако по умолчанию они подобраны оптимально – не меняйте их, если не уверены, что вы делаете. В разделе «Select your ROM from Kitchen`s list or upload your own files», выбираем опцию «Kitchen`s list». Из выпадающего списка выбираем используемую прошивку. Будьте внимательны – если указать не ту версию программного обеспечения, высока вероятность ошибки, после которой в лучшем случае патч не применится вообще, а в худшем – система перестанет загружаться и придется полностью перепрошивать устройство.

После проделанных манипуляций переходим на вкладку «Summary», еще раз проверяем список внесенных изменений и нажимаем кнопку «Submit Work to Kitchen». Теперь осталось дождаться своей очереди – ресурс достаточно популярный, и много кто пользуется его услугами по внесению изменений в операционную систему. Как только очередь дойдет до вас, то сайт предоставит вам ссылку на готовый.zip-архив с приготовленным вами на «кухне» патчем для вашей прошивки. Теперь данный патч следует прошить через Recovery.

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

Давно мечтали собрать сами своими руками прошивку Android из исходного кода, но ни как получалось из за отсутствия внятного материала? подготовил вам подробную интересную статью!

Предисловие

И так перед тем как начать повествовать статью, немного слов для кого она написана: вы уже знаете что такое Linux и установить Ubuntu, Mint, Fedora, OpenSuSe, по крайней мере устанавливали хотя бы один раз из этих ОС, уже знаете что такое командная строка или терминал, команда cd , ls , sh знакома и не вводит в ступор. Отлично, тогда продолжаем изучать статью. Статья Только для устройств Nexus!

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

Необходимое для создания Android прошивки из исходного код

  1. Компьютер или мощный ноутбук
  2. LTS версия ОС UBUNTU 64-разрядная (12.04 или 14.04)
  3. Количество свободного места в разделе /home не менее 100 GB

Не открывайте, не закрывайте, не перемещайте, делайте все как написано в инструкции — последовательно, шаг за шагом, перезагружайте компьютер когда это указано.

Подготовка

1. Перейдите в параметры системы UBUNTU

2. Раздел «Программы и обновления»

3. Вкладка «Программное обеспечение UBUNTU» установить Загрузить с: Основной сервер

4. Вкладка «Другое ПО», установить галочки на Партнеры Canonical иПартнеры Canonical (исходный код)

5. Нажать внизу кнопку Закрыть и после Обновить

6. Запустить программу «Обновление приложений» и обновить систему и перезагрузить компьютер

7. Запустите терминал (горячими кнопками CTRL+ALT+T)

Для Ubuntu 16.04:

sudo apt - get install openjdk - 8 - jdk

Для Ubuntu 14.04:

Вместо android-5.0.2_r1 указывать необходимую версию Android

Загружаем исходный код на компьютер:

Данная процедура будет длится долго (не менее 3 часов) и будет загружено около 30 GB

Сборка проекта

25. После того как скачается весь исходный код Android начнем сборку прошивки Android, введите команду:

source build/envsetup.sh

Перед вами появится окно со списком устройств возможных для создания AOSP прошивки, выбираем цифру и нажимаем ENTER

26. Запускаем сборку Android прошивки

make -j2 otapackage

Вместо j2 стоит указать количество ядер процессора и потоков, если процессор 2 ядреный и включена технология hyper threading (если она доступна), то у вас будет 4 потока (j4 ), если процессор 4 ядерный и выключена технология hyper threading, то также 4 потока (j4 ), а если включена то 8 (j8 ).

В зависимости от мощности и количества ядер участвующих в процессе сборки прошивки зависит и время сборки прошивки, от 20 минут до 24 суток.

Установка

27. После сборки вы обнаружите пакет в папке AOSP/out/target/product/кодовое_имя_nexus/ архив ZIP

28. Переместите данный архив ZIP на устройство NEXUS

31. Установите архив ZIP и после сделайте обязательно wipe

Вот и все! Ничего сложного нет! Статья подошла к концу, подписывайтесь социальные группы и оставайтесь вместе с сайтом !

Практически у каждого пользователя android смартфона появлялось желание создать или отредактировать прошивку под свои нужды и желания. В данной статье мы и рассмотрим принцип редактирования прошивки для CWM (в zip формате).

Подготовка:

В первую очередь необходимо определиться какую прошивку будем брать за основу. Лучше использовать офф. прошивку в зипе. Почти для каждого распространённого девайса существует чистая прошивка + root.
Когда прошивка выбрана её необходимо скачать в любое удобное вам место на ПК (распаковывать не стоит).
Также нам потребуется архиватор, советую использовать 7zip и лучший в своём роде текстовый редактор Notepad++ .

Структура прошивки:

Открывая архив с прошивкой вы видите следующее:
META-INF - в папке хранятся скрипты установки прошивки.
system - папка со всеми файлами прошивки (приложения, твики, скрипты и т.д.).
boot.img - ядро системы.

Практически все манипуляции проводятся в папке system , её структура:
app - системные приложения.
bin - ресурсы самой системы.
etc - Скрипты, твики, конфиги, профили и настройки системы.
fonts - Системные шрифты.
framework - здесь хранятся главные файлы системы (графика, настройки текста анимации и т.д).
lib - библиотеки системы.
media - файлы мультимедиа (мелодии уведомлений, анимация загрузки, обои и т.д).
usr - настройки не изменяемые в дальнейшем системой (работают в режиме "только чтение").
xbin - опять же системные конфиги и прочие твики.
build.prop - инфа о системе, настройки локали и производительности системы.

Приложения:

Перед тем как добавлять/удалять софт в систему, необходимо проверить деодексирована ли ваша прошивка (то есть проверить наличие файлов.odex в папке app. Если файлы есть, то необходимо от них избавиться вот по этой инструкции .
Добавляем софт в прошивку:
Прежде всего необходимо установить себе в смарт те программы которые вы хотите добавить в сборку. После установки достаём их из системы при помощи Root Exporer и его аналогов, находятся они по пути data/app , так же нам понадобятся их либы (если они конечно есть) они находятся по пути data/data . Находятся они в одноимённой приложению папке и имеют расширение .so . Затем изъятые .apk файлы кладем в архив по пути system/app и файлы с расширением .so (lib"ы) по пути system/lib .
Удаляем софт из прошивки:
Тут всё просто, заходим в папку app - определяемся что нам не нужно и удаляем весь ненужный софт (систему лучше не трогать).

Язык и версия прошивки:

Копируем файл build.prop на рабочий стол. Открываем его блокнотом и находим строчки:

ro.product.locale.language=en
ro.product.locale.region=US

для русского языка необходимо сделать так:

ro.product.locale.language=ru
ro.product.locale.region=RU

название своего мода вписываем в строку

в том же build.prop

Графика:

Вся графическая часть прошивки хранится в двух файлах framework-res.apk путь к файлу systemframework и SystemUI.apk по пути systemapp . А графическая часть приложения настройки хранится естественно в приложении Settings.apk .

Скрипты и твики (ускорение и оптимизация системы):

Большая часть настроек проводится в файле build.prop , по этому поводу можно прочитать . Так же если ваше ядро поддерживает init.d есть ряд скриптов для оптимизации системы, один из них описан в этой статье (оптимизация оперативной памяти) и в данной статье Скрипты-твики для init.d

Замена шрифтов системы:

Как выше излагалось все шрифты содержаться в папке fonts , основные шрифты это: DroidSans.ttf и DroidSans-Bold.ttf их можно заменить любыми шрифтами переименовав их аналогично вышеуказанным и переместить с заменой в архив с прошивкой в папку fonts .

Ядро:

Теоретически достаточно заменить boot.img своим, но в некоторых случаях Ядра сопровождаются дополнительными скриптами. По этому советую ничего не делать если есть какие либо сомнения.



Андроид является операционной системой, разработанной корпорацией Google для использования на смартфонах, планшетах, электронных книгах, цифровых проигрывателях и многих других популярных девайсах.

Обычно при покупке вышеперечисленных устройств андроид уже установлен, поэтому нужно только привыкнуть к его управлению.

Однако для этой операционной системы создано множество видов вирусов, поэтому даже антивирусная программа не всегда надежно защитит от них ваше устройство.

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

А что делать, если срочно нужно воспользоваться девайсом, а он неисправен и нет возможности прямо сейчас обратиться к специалистам? В этом случае придется сделать прошивку самому.

Из сегодняшней статьи вы узнаете, как можно сделать прошивку на андроид.

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

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

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

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

Прошивки существуют в разных вариациях – ZIP, TAR архивы или в виде набора файлов в папке. Это обстоятельство и определяет способ установки операционной системы, так как ставятся они по-разному.

Прошиваем, используя ZIP архив

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

Так как андроид делался на основе платформы Unix, то и root права были унаследованы оттуда.

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

Так и в андроид – root открывает или закрывает право пользователя производить в операционной системе определенные изменения.

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

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

Теперь вам нужно инсталлировать на гаджет программу, которая даст вам возможность восстановить систему (к примеру, ClockWorkMod). Этой же программой можно прошить ваш гаджет.

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

Что случится если долго смотреть в глаза человеку

Влюблен ли в вас мужчина: 10 признаков

Как найти свою вторую половинку: советы для женщин и мужчин

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

Сам процесс резервного копирования системы при помощи использовании программы ClockWorkMod делается так.

Запускаете программу ClockWorkMod на своем устройстве.

В ней выбираете пункт меню «Backup & restore», а в нем жмете на надпись «backup».

Подтверждаете действие («YES»).

Перезагружаете систему, выбрав пункт меню «Reboot system now».

В результате этих действий после перезагрузки устройства на его карту памяти запишется новая папка с резервной копией системы. Ее можно обнаружить, пройдя по пути clockworkmod/backup. Вы легко можете узнать эту папку по имени – оно включает в себя дату и время создания копии.

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

Записываете ранее скачанный фай ROM в карту памяти. Он по умолчанию находится в архиве с расширением ZIP.

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

Переходите в меню и нажимаете на надпись «Wipe» — это действие сотрет информацию о текущем состоянии системы.

После выполнения этого действия возвращаетесь в начало меню и выбираете надпись «Install zip from sdcard» или «Flash Zip from SD Card».

Находите файл ROM с прошивкой, который располагается в архиве с расширением Zip.

Подтверждаете действие, руководствуясь инструкцией на экране.

После окончания процесса выбираете «Reboot system now» в главном меню. Гаджет перезагрузится, и можете пользоваться обновленным устройством.

Перепрошивка андроид из папки с тремя файлами

Для начала скачиваете и устанавливаете на устройство программу Mobile Odin Pro.

Копируете в одну папку три файла, в названиях которых присутствуют надписи CSC, CODE, Modem.

Запускаете программу и выбираете пункт меню «Open file».

В открывшемся окне находите и выбираете файл, в котором присутствует слово «CODE», после чего нажимаете «ОК».

Проверяете, чтобы информация присутствовала во всех разделах.

Ждете окончания процесса.

Видео уроки

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

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




Top