Створюємо Android-прошивку з підручних матеріалів

  1. Зміст статті Будь-який користувач Android має своє уявлення про те, як повинна виглядати операційна...
  2. вибираємо піддослідного
  3. Загальна структура каталогів і важливі файли
  4. Kоманда setprop
  5. Власний набір ПО
  6. Зовнішній вигляд
  7. WWW
  8. низькорівневі настройки
  9. збірка
  10. висновки

Зміст статті

Будь-який користувач Android має своє уявлення про те, як повинна виглядати операційна система, які функції виконувати і який набір ПО в ній повинен бути встановлений за замовчуванням. Однак далеко не всі знають, що створити власну прошивку не так вже й складно. Для цього зовсім не обов'язково розбиратися в ядрі Linux, вміти компілювати вихідні Android або розуміти, як влаштований смартфон.

Вступ

Існує три способи створення власної прошивки для Android-комунікатора: 1. Допилювання і компіляція операційної системи з початкових кодів, що публікуються компанією Google або командою CyanogenMod. 2. Модифікація стокової прошивки комунікатора. 3. Модифікація сторонньої прошивки, створеної за допомогою першого або другого способу.

Перший спосіб є найбільш правильним і гнучким, проте він часто вимагає досить глибоких знань про особливості Android і вміння редагувати вихідні системи так, щоб вони після цього працювали на пристрої. Ця тема виходить за рамки нашої статті, тому збірку початкових кодів Android ми розглядати не будемо, а зупинимося на двох інших способах, точніше на третьому.

Сторонні прошивки (так звані моди) існують практично для будь-якого Android-пристрої, з моменту виходу якого на ринок пройшла хоча б тиждень. Зазвичай вони вже включають в себе всі необхідні модифікації, необхідні для коректної роботи прошивки на вашому пристрої, а тому являють собою відмінну майданчик для експериментів над системою. Їх можна модифікувати практично до невпізнання, включати до складу ОС будь-яке ПЗ, змінювати її зовнішній вигляд, створювати безліч низькорівневих налаштувань за допомогою простого текстового редактора і файлового менеджера. Ці дії не вимагають глибоких знань ОС і можуть бути виконані будь-яким читачем журналу.

вибираємо піддослідного

Отже, припустимо, що наш комунікатор вже зарутован і в завантажувальну область записана консоль відновлення ClockworkMod, що дозволяє встановлювати на апарат будь-які прошивки без всяких обмежень (про те, як це зробити, ми писали в статті «Тотальне підпорядкування», опублікованій в жовтневому номері] [ ). Тепер ми хочемо встановити на пристрій іншу прошивку, та не аби яку, а з власними модифікаціями, настройками і набором ПО. Тому нам потрібен каркас, а саме чужа прошивка, що стабільно працює на нашому пристрої. Де її взяти?

Головне місце проживання всіх ромоделов - це, звичайно ж, форуми xda-developers.com. Там можна знайти все що завгодно для комунікаторів, що працюють під управлінням iOS, Windows Mobile, Windows Phone і Android. Відкриваємо сайт в браузері, тиснемо на розділ Forums і шукаємо в списках форумів свій комунікатор. Далі заходимо в відповідний розділ Android Development і уважно переглядаємо список тем, що містять у назві слово «[ROM]». Краще знайти якусь чисту прошивку з назвою на кшталт «Pure Android 2.3 Rom» або порт CyanogenMod, хоча, по суті, підійде і будь-яка інша (правда, можливо, доведеться скасовувати авторські зміни). Відкриваємо тему, він розтратив перший пост, знаходимо десь в кінці посилання на скачування і завантажуємо ROM на свій комп.

Моди анімації завантаження з xda-developers

Тепер файл прошивки потрібно розкрити. Робиться це за допомогою самого звичайного unzip:

$ Mkdir ~ / rom; cd ~ / rom $ unzip ../путь/до/прошівкі.zip

Загальна структура каталогів і важливі файли

Набір файлів і каталогів, що утворився в результаті виконання попередньої команди, і є, по суті, операційна система Android, причому рівно в тому вигляді, в якому вона буде розміщена в NAND-пам'яті пристрою. Залежно від версії Android і фантазії автора, вона може містити різні набори каталогів і файлів, однак в ній завжди присутні три обов'язкових об'єкта: META-INF, файл boot.img і директорія system.

Перший каталог містить метаінформацію про прошивці, включаючи файли сертифікатів учасника, маніфест зі списком файлів і їх контрольними сумами, а також скрипт оновлення, який може створювати в NAND-пам'яті нові файли, змінювати права доступу і виводити прогрес-бар, який бачать користувачі під час установки прошивки.

Файл boot.img містить завантажувальний образ, який включає в себе ядро ​​Linux і образ initrd. Його можна розпакувати, однак для нас він не несе особливої ​​користі, так як майже будь-які системні параметри можна змінити за допомогою файлів налаштувань і файлової системи / proc. Якщо ж тобі потрібно ядро, зібране з особливими параметрами, наприклад з активованим планувальником BFS або підтримкою NFS, то майже напевно його можна знайти на тому ж xda-developers і прошити за допомогою ClockworkMod.

Якщо ж тобі потрібно ядро, зібране з особливими параметрами, наприклад з активованим планувальником BFS або підтримкою NFS, то майже напевно його можна знайти на тому ж xda-developers і прошити за допомогою ClockworkMod

ClockworkMod Recovery: кастомними меню відновлення для Android

Нарешті, каталог system - це те, заради чого все і затівалося. Вміст цього каталогу і являє собою операційну систему Android без ядра Linux. Він містить все, що потрібно для роботи ОС, а тому знати його структуру просто необхідно. Виглядає вона так:

  • app - встановлені додатки: телефон, калькулятор, календар і т. д.
  • bin-аналог каталогів / bin і / usr / bin в Linux. Містить різні системні компоненти, що використовуються більш високорівневими компонентами системи. Наприклад, саме тут лежить віртуальна машина dalvikvm.
  • etc - файли налаштувань. Повний аналог / etc в Linux, який використовується, однак, тільки системними компонентами. Додатки Android зберігають настройки в каталозі / data / data.
  • fonts - шрифти. За замовчуванням містить тільки фірмові шрифти Droid (або Roboto в Android 4.0).
  • framework - набори Java-класів, які використовуються системою і Android-софтом. Тут же лежить файл framework-res.apk, що містить повний опис інтерфейсу операційної системи, включаючи всі графічні файли.
  • lib - Linux-бібліотеки, які використовуються низькорівневими компонентами системи. Аналог каталогів / lib і / usr / lib в Linux, включає такі стандартні бібліотеки, як libc (правда, Android використовує власну Bionic замість Glibc), libz (gzip-шифрування), libssl і інші.
  • media - мультимедійні дані: рінгтони, звуки сповіщень, звуки інтерфейсу і файли анімації завантаження ОС.
  • tts - файли, необхідні для роботи синтезатора мови.
  • usr - необов'язковий каталог, який зазвичай містить файли, необхідні для роботи софтин з каталогу bin. По суті, аналог / usr / share.
  • vendor - файли, що поставляються виробником апарату. Зазвичай містить бінарну firmware для різних «залізних» компонентів, наприклад модуля Wi-Fi.
  • xbin - необов'язковий каталог, який містить все, що не ввійшло в bin. Як правило, використовується для зберігання корисних утиліт, проте необов'язкових для роботи системи (top, текстовий редактор). CyanogenMod використовує його для зберігання інструментів адміністрування: bash, ssh, powertop, busybox і т. Д.
  • build.prop - файл, що містить інформацію про збірку, а також різні низькорівневі налаштування.

Kоманда setprop

Наведені в статті настройки build.prop можна застосувати і в уже працюючої системі за допомогою команди setprop:

# Setprop debug.sf.nobootanimation 1

Власний набір ПО

Каталог / system / app містить всі встановлене в прошивку ПО. Видаляючи і додаючи пакунки сюди, ми можемо змінити набір додатків, доступних «з коробки». Наприклад, ні для кого не секрет, що стандартний ланчер Android (та й ADWLauncher в CyanogenMod) гальмує і має численні недоліки. ОK, замінимо його на LauncherPro :

$ Rm system / app / Launcher.apk $ wget goo.gl/U9c54 -o system / app / LauncherPro.apk

І це все. Не треба нічого встановлювати, не треба ніде колупатися, просто закидаємо потрібну програму в каталог - і готово. Навіть ім'я не має значення, Android сам знайде потрібну програму і встановить його в якості домашнього екрану. Таким же чином можна помістити в прошивку будь-яку іншу програму або видалити її звідти.

Корисно помістити в прошивку один з додатків для пошуку загубленого смартфона (наприклад, prey), тоді навіть у разі скидання до заводських налаштувань воно залишиться в ОС і буде працювати. Також можна замінити деякий системне ПО, наприклад додати Dialer One замість стандартного Phone.apk або Go SMS замість sms.apk.

Як щодо системних Linux-додатків, наприклад ssh-сервера або mc? Тут теж все просто. Зібрати софтину для Android і процесора ARM можна за допомогою комплекту NDK від Google, але більшість потрібних додатків вже зібрано до нас. Наприклад, ми хочемо попередньо встановити mc в свою прошивку. Йдемо на xda-developers і виконуємо пошук за запитом Midnight Commander. На першій же сторінці знаходимо apk-пакет з монтажником і розпаковуємо його за допомогою все того ж unzip:

$ Cd / tmp; unzip ~ / NativnuxInstaller_1.1.apk

Бачимо в списку розпакованих файлів assets / kits / mc-4.7.5.4-arm.tar.jet. Це архів tar.gz, який розпаковується в корінь системи після установки apk-пакета (а точніше, після установки apk та запустити програму і натискання кнопки Install). Ми можемо відразу розпакувати його в нашу прошивку і отримати встановлений mc:

$ Cd ~ / rom $ tar -xzf /tmp/assets/kits/mc-4.7.5.4-arm.tar.jet

Тепер для запуску файлового менеджера на пристрої досить відкрити термінал і набрати mc. Інші додатки можуть поширюватися в zip-архівах для прошивки за допомогою ClockworkMod Recovery. Помістити їх в свій мод ще простіше, для цього достатньо перейти в корінь прошивки (в даному випадку ~ / rom) і розпакувати архів за допомогою unzip.

Помістити їх в свій мод ще простіше, для цього достатньо перейти в корінь прошивки (в даному випадку ~ / rom) і розпакувати архів за допомогою unzip

Свежераспакованная прошивка

Зовнішній вигляд

Власну прошивку найчастіше створюють для того, щоб змінити зовнішній вигляд Android на свій смак. Виконати цю операцію в Android, знову ж таки, дуже просто. Всі настройки графічного інтерфейсу Android зберігаються в файлі framework / framework-res.apk. Його можна розпакувати за допомогою утиліти apktool:

$ Cd ~; wget goo.gl/hxz5l $ tar -xjf apktool1.4.1.tar.bz2 $ cd ~ / rom / system / framework $ java -jar ~ / apktool.jar d framework-res.apk

В результаті в поточному каталозі повинен з'явитися каталог framework-res, що містить всі файли пакета. Найбільш цікаві підкаталоги усередині нього - це res / drawable- * і res / layout- *. Перший містить всі графічні елементи у вигляді png-файлів для різних дозволів і положень екрану. Наприклад, drawable-land-mdpi - це каталог з графічними ресурсами для екранів середнього дозволу, що знаходяться в горизонтальному положенні (під час повороту екрану ОС перемикається на використання інших файлів). Зрозуміло, будь-який файл можна відредагувати або замінити іншим.

Зрозуміло, будь-який файл можна відредагувати або замінити іншим

Розпаковуємо framework-res.apk

Каталоги layout містять описи графічних елементів в форматі XML (насправді вони зберігаються в бінарному форматі AXML, але apktool перетворив їх в звичайний XML). Формат опису досить простий і зрозумілий, але з наскоку з ним розібратися важко, особливо якщо не знати, де що знаходиться. Тому ми знову звернемося до послуг мешканців форуму xda-developers, які вже встигли придумати масу різних модифікацій для графічного інтерфейсу Android. Їх легко знайти за допомогою пошукового запиту «framework-res mod ім'я_пристрою».

Зазвичай такі моди поширюються в вигляді готового файлу framework-res.apk, який можна просто покласти в свою прошивку. Якщо ж ти хочеш знайти конкретні відмінності у вмісті, то мод можна розпакувати і порівняти з твоїм framework-res за допомогою diff:

$ Diff -R ~ / framework-res \ ~ / rom / system / framework / framework-res

На жаль, в рамках однієї статті ми не можемо розглянути хоча б частину внутрішнього устрою framework-res, тому за більш детальною інформацією звертайся до відповідній темі форуму 4PDA .

На жаль, в рамках однієї статті ми не можемо розглянути хоча б частину внутрішнього устрою framework-res, тому за більш детальною інформацією звертайся до відповідній темі форуму   4PDA

WWW

goo.gl/tlHRo - набір рад зі зміни framework-res.apk.

goo.gl/fTvz8 - проста анімація завантаження з логотипом Android.

goo.gl/Ya1fX - анімація завантаження з плазмовим кругом.

goo.gl/P6JR - анімація завантаження в стилі IBM PC.

goo.gl/sGXwa - анімація завантаження Android Honeycomb.

Після внесення модифікацій можна зібрати framework-res.apk за допомогою все того ж apktool. Однак для цієї операції потрібно утиліта aapt з комплекту Android SDK, яку apktool використовує для остаточної упаковки apk-файлу. Її можна отримати і окремо:

$ Cd ~ / bin; wget goo.gl/tC7k8

Тепер можна зібрати файл:

$ Cd ~ / rom / system / framework $ java -jar ~ / apktool.jar b framework-res $ cp framwork-res / dist / framework-res.apk. $ Rm -rf framework-res

Наступний етап - це зміна анімації завантаження. Вона зберігається в вигляді звичайних png-файлів, упакованих в архів system / media / bootanimation.zip. Розпакуємо його:

$ Cd / tmp $ mkdir bootanimation; cd bootanimation $ unzip ~ / rom / system / media / bootanimation.zip

Всередині знаходиться файл desc.txt, що описує анімацію в наступному форматі:

Ширина Висота FPS p Порядок Пауза Каталог ...

Стандартний вид цього файлу:

480 800 30 p 1 0 part0 p 0 0 part1

Це означає, що зображення має розмір 480 x 800, а швидкість зміни зображень (FPS) становить 30 штук / с. Далі йде опис першої частини анімації, файли якої знаходяться в каталозі part0. Вона програється один раз (цифра 1 після p). Наступна частина (part1) програється нескінченне число разів, поки апарат не завантажиться. Зазвичай каталог part0 містить зображення, відповідні першій частині анімації, а part0 - всі інші зображення, які програються в циклі. Самі зображення повинні бути однакового розміру, а їх назви повинні містити числа в порядку зростання, наприклад 0001.png, 0002.png і т. Д.

Так як анімація завантаження має дуже простий формат, її досить легко зробити. Досить перетворити відеоролик в png-зображення за допомогою mencoder (в desc.txt необхідно виставити значення FPS 24):

$ Mplayer -nosound -vo png: z = 9 video.avi

Але і це буде зайвим. Учасники форуму xda-developers наробили стільки анімацій, що необхідність роботи руками відпадає зовсім. Посилання на цікаві анімації наведені в кінці статті.

низькорівневі настройки

Останнє, про що я хотів би розповісти в статті, - це редагування низькорівневих налаштувань. В Android для цього є файл system / build.prop, який зберігає інформацію про збірку прошивки і налаштування для конкретних пристроїв. Додавши в цей файл ті чи інші рядки, можна змінити функціонування Android, прискорити його роботу або зменшити витрату батареї. Нижче наведені найбільш цікаві настройки.

Нижче наведені найбільш цікаві настройки

Стандартний build.prop для Motorola Defy

  1. Заборона вивантаження робочого столу з пам'яті: ro.HOME_APP_ADJ = 1

    Опція дозволяє зробити роботу з пристроєм більш зручною за рахунок миттєвого доступу до робочого столу в будь-який час. Не рекомендується використовувати для пристроїв з малим об'ємом пам'яті.

  2. Підвищення якості зберігаються JPG-файлів: ro.media.enc.jpeg.quality = 100

    Дозволяє зробити знімки камери більш чіткими, але істотно підвищує навантаження на ЦП.

  3. Відключення анімації завантаження для прискорення завантаження операційної системи: debug.sf.nobootanimation = 1
  4. Покладання частини роботи по відображенні інтерфейсу на GPU: debug.sf.hw = 1

    Дозволяє зробити інтерфейс більш швидким і плавним.

  5. Блокування сповіщення про активному режимі налагодження (при підключенні до комп'ютера за допомогою USB): persist.adb.notify = 0
  6. Усунення проблеми з виникненням чорного екрану після завершення дзвінка: ro.lge.proximity.delay = 25 mot.proximity.delay = 25
  7. Включення підсвічування клавіш управління відразу після включення екрану: ro.mot.buttonlight.timeout = 0

Крім того, багато користувачів також рекомендують застосовувати такі комбінації прапорів:

  1. Зменшення часу відгуку сенсорного екрану: debug.performance.tuning = 1 video.accelerate.hw = 1 windowsmgr.max_events_per_sec = 150
  2. Збільшення часу життя батареї: wifi.supplicant_scan_interval = 180 pm.sleep_mode = 1 ro.ril.disable.power.collapse = 0
  3. Твіки 3G-модуля: ro.ril.hsxpa = 2 ro.ril.gprsclass = 10 ro.ril.hep = 1 ro.ril.enable.dtm = 1 ro.ril.hsdpa.category = 10 ro.ril.enable. a53 = 1 ro.ril.enable.3g.prefix = 1 ro.ril.htcmaskw1.bitmask = 4294967295 ro.ril.htcmaskw1 = 14449 ro.ril.hsupa.category = 5
  4. Поліпшення продуктивності мережі: net.tcp.buffersize.default = 4096,87380,256960,4096,16384,256960 net.tcp.buffersize.wifi = 4096,87380,256960,4096,16384,256960 net.tcp.buffersize.umts = 4096,87380,256960,4096,16384,256960 net.tcp.buffersize.gprs = 4096,87380,256960,4096,16384,256960 net.tcp.buffersize.edge = 4096,87380,256960,4096,16384,256960

Всі ці рядки необхідно просто помістити в файл system / build.prop і зберегти.

збірка

ОК, ми внесли необхідні зміни, впровадили свої додатки, твікнулі систему і тепер повинні створити готовий до прошивці образ ОС. У цьому нам допоможе утиліта testsign. Спочатку слід запакувати прошивку за допомогою zip:

$ Cd ~ / rom; zip -r my-rom.zip *

Тепер необхідно підписати архів, щоб Recovery зміг його встановити:

$ Wget goo.gl/OyBBk $ java -classpath testsign.jar testsign \ my-rom.zip my-rom-signed.zip

Після цього закидаємо архів my-rom-signed.zip на карту пам'яті пристрою і вимикаємо апарат. Щоб потрапити в Recovery, включаємо апарат з затиснутою клавішею зменшення гучності (для деяких пристроїв процедура може відрізнятися).

Далі за допомогою клавіш управління гучністю вибираємо пункт «Wipe data / factory reset», натискаємо кнопку живлення (в Recovery це аналог), вибираємо Yes і знову тиснемо.

Тепер переходимо до пункту «Install zip from sdcard», а потім в «Choose zip from sdcard», знаходимо my-rom-sign.zip на SD-карті і вибираємо Yes. Після завершення установки вибираємо «Reboot system now».

висновки

Android - гнучка платформа, і в цій статті описані далеко не всі можливості по її модифікації. Більш глибока модифікація може включати в себе заміщення ядра, зміна екрану блокування і стандартних програм, активацію таких можливостей, як автоматична установка додатків на карту пам'яті, впровадження механізму завантажувальних скриптів (/etc/init.d), і багато іншого. Про все це ми поговоримо в наступних статтях.

Де її взяти?
Як щодо системних Linux-додатків, наприклад ssh-сервера або mc?

Дополнительная информация

rss
Карта