- Зміст статті Будь-який користувач Android має своє уявлення про те, як повинна виглядати операційна...
- вибираємо піддослідного
- Загальна структура каталогів і важливі файли
- Kоманда setprop
- Власний набір ПО
- Зовнішній вигляд
- WWW
- низькорівневі настройки
- збірка
- висновки
Зміст статті
Будь-який користувач 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.
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.
Свежераспакованная прошивка
Зовнішній вигляд
Власну прошивку найчастіше створюють для того, щоб змінити зовнішній вигляд 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 .
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
- Заборона вивантаження робочого столу з пам'яті: ro.HOME_APP_ADJ = 1
Опція дозволяє зробити роботу з пристроєм більш зручною за рахунок миттєвого доступу до робочого столу в будь-який час. Не рекомендується використовувати для пристроїв з малим об'ємом пам'яті.
- Підвищення якості зберігаються JPG-файлів: ro.media.enc.jpeg.quality = 100
Дозволяє зробити знімки камери більш чіткими, але істотно підвищує навантаження на ЦП.
- Відключення анімації завантаження для прискорення завантаження операційної системи: debug.sf.nobootanimation = 1
- Покладання частини роботи по відображенні інтерфейсу на GPU: debug.sf.hw = 1
Дозволяє зробити інтерфейс більш швидким і плавним.
- Блокування сповіщення про активному режимі налагодження (при підключенні до комп'ютера за допомогою USB): persist.adb.notify = 0
- Усунення проблеми з виникненням чорного екрану після завершення дзвінка: ro.lge.proximity.delay = 25 mot.proximity.delay = 25
- Включення підсвічування клавіш управління відразу після включення екрану: ro.mot.buttonlight.timeout = 0
Крім того, багато користувачів також рекомендують застосовувати такі комбінації прапорів:
- Зменшення часу відгуку сенсорного екрану: debug.performance.tuning = 1 video.accelerate.hw = 1 windowsmgr.max_events_per_sec = 150
- Збільшення часу життя батареї: wifi.supplicant_scan_interval = 180 pm.sleep_mode = 1 ro.ril.disable.power.collapse = 0
- Твіки 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
- Поліпшення продуктивності мережі: 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?