Патчимо прошивку Android за 5 хвилин

Все почалося з того, що я захотів встановити на планшет Digma Optima 7.61 гру GTA San Andreas. На жаль, віртуальна SD-карта планшета має об'єм менше 1 Гб, а кеш гри важить близько 2-3 Гб. На планшеті встановлений Android 4.4.2 і можливість просто взяти та змінити пам'ять за замовчуванням у ньому відсутня. Також в ньому відсутній файл /etc/vold.fstab (він є на більш старих версіях андроїда, і змінивши цей файл з root-правами, можна поміняти місцями віртуальну та реальну карти пам'яті).

Необхідні інструменти

1. Комп'ютер або ноутбук із ОС Linux. 2. Утиліти adb і fastboot (входять до складу Android SDK, так само, як зауважив tmnhy, входять до репозиторії як окремі пакети). 3. Набір утиліт bootimg_tools (знайшов тут).

1. Виймаємо із пристрою завантажувальний образ

— Підключаємо пристрій до комп'ютера через usb-кабель і заходимо до shell пристрою:

— Десь у папці/dev/blockна пристрої потрібно знайти файл з ім'ямboot. У мене він був по дорозі/dev/block/by-name/boot, але цей шлях може відрізнятися на різних пристроях.

— Витягуємо завантажувальний образ:

— Виходимо з shell'а (exit) і витягуємо образ:

2. Потім завантажувальний образ потрібно розібрати

- Завантажуємо та розпаковуємо bootimg_tools.

— Додаємо bootimg_tools до PATH:

— Якщо всі попередні кроки зроблено правильно, то має з'явитися папкаboot-from-device. Всередині неї повинні лежати файлиzImageіramdisk.cpio.gz, а також папкаramdisk. Саме всередині останньої лежить вміст завантажувального образу, який ми будемо патчити.

Для вирішення свого завдання я знайшов рядок, який потрібно замінити у файлі init.sun8i.rc. Я просто замінивexport EXTERNAL_STORAGE/mnt/sdcardнаexport EXTERNAL_STORAGE /mnt/extsd. Як я розумію, це якраз і є те значення, яке повертає методEnvironment.getExternalStorageDirectory()в Android API. На користь цього припущення говорить той факт, що після застосування патча програми почали використовувати апаратну картку пам'яті замість віртуальної для зберігання даних.

4. Замінюємо завантажувальний образ на пристрої

Я написав для цього невеликий скрипт:

Після виконаних маніпуляцій гра на планшеті успішно запрацювала.