
В общем, купил я себе читалку Nook, читал-читал несколько недель, а потом мне захотелось написать что-нибудь под нее и это начинание перешло в русифицированную прошивку, сделанную вместе с хабраюзером nilov и при помощи разных людей с nookdevs.org, включая JesusFreke и poutine.
Отмазки
- Лично я все делал под линуксом, но ничего особенного, чего нельзя (как мне кажется) сделать под виндой (а под нее были написаны первые версии скриптов) или под маком.
- Я новичок в написании скриптов, так что был бы рад, если бы их кто-то привел в порядок или поправил бы меня.
- И да, я не несу никакой ответственности за то, что вы сделаете со своим нуком.
- Отчасти эта статья будет пособием для тех, кто тоже захочет присоединиться к нам
Необходимое ПО
- Свежая версия моего тулкита
- Свежий Android SDK со скаченным пакетом для 1.5
- Текстовый редактор
- Linux
Описание всех утилит и сборка своей прошивки
ВНИМАНИЕ: Я очень Вас прошу — не создавайте тысячи вариантов прошивок! Давайте делать это все более-централизованно!
Получение приложений прямо с устройства: утилиты download/download-all
Эти утилиты позволяют скачать приложения с вашего нука в папку downloaded, а так же полностью распаковывает их в папку extracted (она нам потребуется для получения исходных ресурсов и кода).
Первая на вход получает названия системного приложения, а вторая ничего не получает и скачивает все приложения, указанные в rus_res/index
Выглядят они очень просто — это последовательное выполнение утилит adb и apktool:
adb pull /system/app/$1.apk downloaded/$1.apk
java -jar apktool.jar d -f downloaded/$1.apk extracted/$1/
После выполнения download-all мы получаем все необходимые нам ресурсы и теперь мы можем приступить к модификации и замене ресурсов.
Модификация приложений
Тут есть некоторые сложности. Безболезненно Вы можете менять лишь ресурсы, а код не получится поменять, видимо, из-за кеша dalvik-машины или еще чего подобного.
Ресурсы
Вот в замене ресурсов нет ничего сложного — мы просто распаковываем из папки downloads во временную папку work/%appname%, заменяем там файлы и запаковываем обратно, а затем выполняем adb push (не adb install) и загружаем приложение на устройство. Данный метод очень удобен для отладки нового дизайна, отладки шрифтов и css-ок в ридерах нечто упрощенное этого метода и использовал мой знакомый с mynook.ru при подборе шрифтов и т.д. =)
Код
Тут все абсолютно так же, как и с ресурсами, но есть одно но. У нас не выйдет поставить приложение на устройство. При попытке открыть новое приложение нук просто напросто повиснет, а нормальный adb install не прокатит, т.к. мы меняем системные приложения. В чем выход? Выход в том, что бы собирать уже непосредственно прошивки с измененным кодом и их уже ставить на устройство и смотреть как работают. Да, сложно, но кардинальных изменений нам и не требуется все равно.
Скрипты для модификаций: process/process-all
Полный код process
Здесь кратко опишу что и куда он копирует и выполняет (все файлы берутся из rus_res/%appname%/)
- Для Home и Library распаковываем с декомпиляцией кода, для остального — только ресурсы — здесь надо править, если в других приложениях вы будете менять код
- strings.xm -> values/strings.xml
- styles.xm -> values/styles.xml
- strings.xm -> values/arrays.xml
- colors.xm -> values/colors.xml
- values/* -> values/*
- xml/* -> xml/*
- assets/* -> assets/*
- выполняет script
- layouts/* -> res/layout/*
- drawable/* -> res/drawable/*
- Пакует
- Подписывает нашим ключом
Русификация большинства текстов: папка sasha и скрипт copy-sasha
В папке sasha (так просто зовут дизайнера с mynook, кстати, огрооомное ему спасибо за это. без него не было бы у меня энтузиазма как минимум =)) лежат разрезанные xmlки с текстами, которые склеивываются и копируются в необходимые места в папке rus_res.
Загрузка на устройство: upload/upload-all
Напомню, что это только для приложений с измененными ресурсами и с оригинальным кодом.
Код тоже крайне прост:
adb push %appname%.apk /system/app/%appname%.apk
Создание прошивки: build-firmware
Тут тоже все очень несложно =) Мы будем использовать стандартную софтрутовскую прошивку и менять ее.
На IRC-канале nookdevs.com мне люди дали специальный (не сложный) скрипт для запаковки/распаковки образов и мы его так же будем использовать.
С помощью всего этого мы можем максимально упростить весь ход создания прошивки: распаковка, изменение, запаковка.
Перечислю, что мы изменяем в прошивке на данный момент:
- Заменяем необходимые системные приложения нашими русифицированными приложениям из папки output (полученные на предыдущих шагах через скрипт process).
- Копируем init.rc — нужно для FBReader'а
- Копируем наши приложения — менеджер приложений и наш модифицированный wifi locker с nookdevs.com
- Копируем FBReader и связанные с ним хаки — к примеру, sqlite3root с SUID, а так же заменяем загрузочные скрипты, которые правят права на sqlite3root, копируем нативные библиотеки фбридера.
- Копируем русифицированные UI шрифты.
- Копируем обои =)
Теперь у нас есть прошивка и мы можем ее запустить на нашем рутованном нуке!
PS:
там может потребоваться создание вручную некоторых папок, не помню где уже я в скриптах налажал.