Данное руководство предназначено для тех, кто хочет видеть MIUI v4 на своем устройстве, но данная прошивка для него не выпускается официально. Перед тем, как начать портирование, нужно немного подготовиться. А именно скачать несколько утилит и приложений (если вы их еще не скачали и не пользуетесь ими, конечно 😉 ).
Итак, начнем.
Android SDK Platform Tools
Чтобы отслеживать ошибки во время процесса портирования (а они несомненно будут), нам понадобится утилита adb (Android Debug Bridge). Ее можно найти в Android SDK Platform Tools.Для начала качаем sdk и следуем инструкциям — http://developer.android.com/sdk/index.html. После того, как вы скачали и установили SDK, вам нужно установить platform tools по иструкции здесь — http://developer.android.com/sdk/adding-components.html
apktool
Если вам понадобится изменить что-то в APK файлах во время портирования — данная утилита вам в помощь. Описание с сайта-источника (code.google.com): «It is a tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form and rebuild them after making some modifications; it makes possible to debug smali code step by step. Also it makes working with app easier because of project-like files structure and automation of some repetitive tasks like building apk, etc.» Скачать ее можно здесь http://code.google.com/p/android-apktool/. Или лучше всего возьмите ее здесь —http://connortumbleson.com/apktool-v1-4-5-a-tool-for-reverse-engineering-apk-files/ (версия 1.4.5 с некоторыми исправлениями).
smali/baksmali (необязательно)
apktool также может помочь в декомпилировании и компилировании .jar файлов в дополнение к .apk файлам, но предпочтительнее использовать smali/baksmali. Если вам нужно деодексировать прошивку, например, при источнике для портирования (прошивка-донор) с сайта miui.com (Nexus S, Galaxy Nexus, Mi One Plus), вам понадобятся именно эти две утилиты. Скачать можно отсюда — http://code.google.com/p/smali/ .
ZIP
Т.к. .apk и .jar файлы — это самые обычные zip архивы со специфичной структурой, вам понадобится инструмент для добавления ваших модификаций в оригинальный файл. В linux (как например в моем случае) есть нативные инструменты для всего этого (zip, unzip). Для Windows можно (да и лучше всего) использовать 7zip, доступный для скачивания здесь — http://www.7-zip.org/. Mac OSX пользователи могут использовать 7zX, официальное приложение 7zip, взять можно здесь — http://sixtyfive.xmghosting.com/products/7zx/.
Инструкций универсальных для портирования miui v4 нет, по крайней мере ни одна из них не работает для абсолютно всех устройств. Поэтому процесс портирования рассмотрим на примере конкретного устройства, владельцем которого я являюсь — Google Nexus One (HTC Passion). Начнем.
MIUI v4
Для начала вам нужно скачать прошивку MIUI v4 для использования в качестве базы. Выбирать стоит прошивку от устройства, максимально приближенного по железу к вашему (обычно разрешение экрана, процессор, память). Лучшим выбором для источника в моем случае будет прошивка MIUI для Nexus S (crespo).
AOSP ICS
Также вам понадобятся файлы, специфичные для вашего устройства, и чтобы их заполучить, вам понадобится прошивка ICS для вашего телефона. Без этих файлов у вас вряд ли что-то особо получится с портированием v4. Для nexus one, отлично подойдут прошивки ICS от Evervolv. Найти прошивки можно на xda-developers.
Теперь, когда у вас есть все необходимое, начнем самую веселую часть! Для начала создадим папки для распакованных прошивок ICS и MIUI v4.
- Создаем рабочую папку для нашего устройства. В моем случае я создал папку passion.
- Создаем папку miui (внутри первой папки) и распаковываем в нее прошивку MIUI.
- Создаем папку ics (внутри первой папки) и распаковываем в нее прошивку AOSP.
Для портирования нам понадобится скопировать некоторые файлы и папки из AOSP папки в папку MIUI. Какие именно, рассмотрим ниже.
- META-INF (всю папку)
- boot.img (это ядро)
Это была самая легчая часть работы, перейдем к более сложной части, где придется подумать, что копировать. Нам понадобится скопировать файлы и папки (не все, конечно) из папки system прошивки AOSP. Начнем по порядку, в алфавитном порядке, начав с папки app и заканчивая папкой xbin.
app
Оставляем все как есть
bin
Копируем отсюда все, кроме logcat, logwrapper и su
etc
Из MIUI папки (etc) удалим следующие папки и заменим аналогичными из AOSP.
- bluetooth
- dhcpcd
- wifi
Теперь сравним, какие файлы и папки есть в AOSP и таких нет в MIUI, скопируем их в MIUI. Вот список для Nexus One (ваш может отличаться, все зависит от устройства):
- firmware (папка)
- init.d (папка)
- nano (папка)
- terminfo (папка)
- AdieHWCodecSetting.csv
- AudioBTID.csv
- ecclist_for_mcc.conf
- profile
- sysctl.conf
- vpimg
Теперь понадобится скопировать файлы и папки, которые есть в обеих прошивках. Во время копирования папок нужно заменить файлы, которые совпадают (одинаковые, короче). Например, нам нужно скопировать все файлы из папки permissions (некоторые из файлов есть только в MIUI). Вот список того, что нужно скопировать из AOSP:
- permissions (папка) — удалите все android.hardware.*.xml файлы из MIUI, которые есть только в этой папке и их нет в AOSP permissions папке.
- apns-conf.xml
- audio_effects.conf
- dbus.conf
- event-log-tags
- gps.conf
- init.goldfish.sh
- media_profiles.xml
- mkshrc
- vold.fstab
fonts
Оставляем все как есть
framework
Оставляем все как есть
lib
Здесь немного посложнее. Здесь придется выбирать то, что хотим заменить. Отсутствующие или несовместимые библиотеки — основная причина бутлупа. Для начала удалим все папки, которые есть внутри папки lib в MIUI. Теперь скопируем все папки (до файлов еще дойдем) из AOSP в MIUI папку lib.
Теперь скопируем все файлы, которые есть только в AOSP в папку MIUI. Теперь начнем заменять файлы в папке lib MIUI аналогичными из AOSP. Вот список файлов для Nexus One ICS прошивки, которые необходимо скопировать (для вашего телефона могут быть отличия, но все же):
- libandroid_runtime.so
- libbinder.so
- libbluedroid.so
- libbluetoothd.so
- libbluetooth.so
- libbtio.so
- libcamera_client.so
- libcameraservice.so
- libc.so
- libdbus.so
- libdl.so
- libdvm.so
- libEGL.so
- libGLESv1_CM.so
- libGLESv2_dbg.so
- libGLESv2.so
- libgui.so
- libhardware_legacy.so
- libhardware.so
- libhwui.so
- libinput.so
- libreference-ril.so
- libskia.so
- libstagefright_amrnb_common.so
- libstagefright_avc_common.so
- libstagefright_enc_common.so
- libstagefright_foundation.so
- libstagefrighthw.so
- libstagefright_omx.so
- libstagefright_soft_aacdec.so
- libstagefright_soft_amrdec.so
- libstagefright_g711dec.so
- libstagefright_soft_h264dec.so
- libstagefright_soft_mp3dec.so
- libstagefright_soft_mpeg4dec.so
- libstagefright_soft_vorbisdec.so
- libstagefright_soft_vpxdec.so
- libstagefright_yuv.so
- libsurfaceflinger.so
- libui.so
- libwebcore.so
- libwpa_client.so
media
Оставляем все как есть
tts
Оставляем все как есть
usr
Копируем все папки из AOSP в MIUI usr папку, заменяя при этом все файлы с одинаковыми именами.
vendor
Удаляем эту папку в MIUI и копируем ее из AOSP на место удаленной.
xbin
Копируем отсюда все файлы кроме su. Важно НЕ КОПИРОВАТЬ su из AOSP. Это связано с тем, что приложение «Разрешения» в MIUI не будет работать, если мы будем использовать неправильный бинарник su.
build.prop
Для build.prop самый легкий вариант — это использовать его из прошивки AOSP, только скопировать в него пару строк из MIUI build.prop. Вот эти строчки нам понадобятся из MIUI build.prop, просто добавляем их в конце файла.
ro.config.ringtone=MI.ogg ro.config.notification_sound=FadeIn.ogg ro.config.alarm_alert=GoodMorning.ogg ro.config.sms_received_sound=FadeIn.ogg ro.config.sms_delivered_sound=MessageComplete.ogg
Замечание: Убедитесь, что таких параметров нет в build.prop. Если они есть, то просто удалите их.
Вот и все в плане копирования специфичных для вашего устройства файлов для MIUI v4. Теперь нужно только запаковать прошивку zip, скопировать на телефон и прошить.