MIUI ICS Porting manual

Автор: | 26.07.2012

Данное руководство предназначено для тех, кто хочет видеть 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/.


Портируем v4 для Nexus One (passion)
 

Инструкций универсальных для портирования 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.

  1. Создаем рабочую папку для нашего устройства. В моем случае я создал папку passion.
  2. Создаем папку miui (внутри первой папки) и распаковываем в нее прошивку MIUI.
  3. Создаем папку ics  (внутри первой папки) и распаковываем в нее прошивку AOSP.

Для портирования нам понадобится скопировать некоторые файлы и папки из AOSP папки в папку MIUI. Какие именно, рассмотрим ниже.

  1. META-INF (всю папку)
  2. boot.img (это ядро)

Это была самая легчая часть работы, перейдем к более сложной части, где придется подумать, что копировать. Нам понадобится скопировать файлы и папки (не все, конечно) из папки system прошивки AOSP. Начнем по порядку, в алфавитном порядке, начав с папки  app и заканчивая папкой xbin.

app
Оставляем все как есть

bin
Копируем отсюда все, кроме logcatlogwrapper и 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, скопировать на телефон и прошить.

Раздел: blog