Android

индекс
179,33

Русификации читалки Nook: что получилось (техническая сторона)

image

В общем, купил я себе читалку Nook, читал-читал несколько недель, а потом мне захотелось написать что-нибудь под нее и это начинание перешло в русифицированную прошивку, сделанную вместе с хабраюзером nilov и при помощи разных людей с nookdevs.org, включая JesusFreke и poutine.



Отмазки


  • Лично я все делал под линуксом, но ничего особенного, чего нельзя (как мне кажется) сделать под виндой (а под нее были написаны первые версии скриптов) или под маком.
  • Я новичок в написании скриптов, так что был бы рад, если бы их кто-то привел в порядок или поправил бы меня.
  • И да, я не несу никакой ответственности за то, что вы сделаете со своим нуком.
  • Отчасти эта статья будет пособием для тех, кто тоже захочет присоединиться к нам

Необходимое ПО




Описание всех утилит и сборка своей прошивки


ВНИМАНИЕ: Я очень Вас прошу — не создавайте тысячи вариантов прошивок! Давайте делать это все более-централизованно!

Получение приложений прямо с устройства: утилиты 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%/)

  1. Для Home и Library распаковываем с декомпиляцией кода, для остального — только ресурсы — здесь надо править, если в других приложениях вы будете менять код
  2. strings.xm -> values/strings.xml
  3. styles.xm -> values/styles.xml
  4. strings.xm -> values/arrays.xml
  5. colors.xm -> values/colors.xml
  6. values/* -> values/*
  7. xml/* -> xml/*
  8. assets/* -> assets/*
  9. выполняет script
  10. layouts/* -> res/layout/*
  11. drawable/* -> res/drawable/*
  12. Пакует
  13. Подписывает нашим ключом


Русификация большинства текстов: папка 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:
там может потребоваться создание вручную некоторых папок, не помню где уже я в скриптах налажал.
+43
28 июня 2010, 17:29
25

комментарии (30)

+1
IMA #
Я правильно понял, что на mynook.ru та же русификация для 1.4, сделанная с Вашей помощью? Молодцы, чесслово!
+7
Ex3NDR #
Да, это она и есть.

Спасибо =)
0
mariana123 #
Удачи с вашим проектом!
Планируются ли более существенные изменения прошивки? Скажем, нормальный браузер (пока для того, что бы открыть страницу не из избранного, надо сделать не меньше четырех(!) кликов).
Я в свой нук больше 30 книг не загружаю, т.к. неудобно рыскать по списку книг в поисках нужной. Поддержка папкой, а лучше меток по жанрам, авторам, начата ли книга и т.п. была бы _очень_ удобна.
+3
stari4ek #
Я конечно не знаю, как именно работают локали в nook-е, но это очень очень неправильно редактировать существующую локаль по-умолчанию.
все приложения на андроиде поддерживают произвольное количество локалей.
для этого создается, например /res/values-ru/ для русской локали куда помещаются соответствующие ресурсы: strings.xml и т.д.
Раздел «Код». Если честно я не понял, что вы хотели сказать, хотя и имею непосредственный опыт по работе с кастомами. Конечно, возможно, есть какие-то особенные проблемы свойственные именно nook-у, но для обычного андроида тут два варианта:
— системные приложения хранятся в оптимизированном виде с odex-ами. Меняя такое системное приложение все другие приложения использующие его перестанут работать (они хранят CRC того odex-а, который был использован при их оптимизации)
— подписывание приложения с shared uid. Такое приложение будет отвергнуто на этапе установки, из-за несоответствия сертификата уже существующим. Все приложения использующие один shared uid должны использовать один сертификат подписи.

Удачи в разработке.
+1
Ex3NDR #
да, я о /res/values-ru/ знаю, просто там нет дефолтного приложения для перевода на другую локаль, а быстро кусок кода для этого я не нашел (там же рефлексия нужна), ну и пока что я просто взял и зменил просто напросто дефолтные значения. в дальнейшем, конечно, попробую добавлять, а не заменять.

А вот насчет безопасности не знаю. Поставить НОВОЕ приложение получается легко, а что бы его переустановить (с тем же сертификатом и т.д.) уже не выходит. А никаких odex'ов там нет. shared uid на этапе установки проходит, да, но через adb push простой перезаписью (если не меняли код) прокатывает и это позволяло максимально просто девелопить без глубоких копаний. Я вообще новичок в кишках андроида — я год-два девелопил на чистой джаве с маленькой примесью JNI, а вот дальше, с т.з. разработчиков железок, я не смотрел, а по этому был бы рад помощи и подсказкам =)
НЛО прилетело и опубликовало эту надпись здесь
+1
corax #
Отлично. Респект парням. Недавно был у них на mynook.ru. Недорогая читалка, так теперь ещё и на Русском.
*мож вставить хоть пару картинок? ;)
+1
DedalX #
Хотяб таких
+3
ilvar #
Было бы очень круто, если бы был на читалке клиент для библиотеки типа flibusta.
0
Rabik #
Никогда о Nook не слышал, посему назрел вопрос:
если у меня уже ридер Sony 505-ый, есть ли смысл менять его на Nook? (Цветной экранчик не важен.)
+1
Ex3NDR #
честно? я бы не советовал, но вообще надо вертеть в руках — все зависит от того, что вы выделяете в читалке. я вот выделяю андроид =)
0
Rabik #
=)
по мне хороший шрифт, удобство, красивый дизайн и чтобы не отсвечивало — вот идеал всего

спасибо за совет, подожду пока
+1
Ex3NDR #
ну тогда нук — ваш выбор)
в нашей прошивке можете поставить шрифт какой захотите (правда, это пока что только для epub) у меня вот очень красивый пак шрифтов сделан) очень приятно читать)

Но нук сам по себе крупнее, нет горизонтального режима и т.д.
+2
Rabik #
Ах, в Sony, оказывается, есть горизонтальный режим… :)
0
Ex3NDR #
в смысле?) его там нет?) или он не нужен был никогда?)
0
anton_k #
Если Sony нормально работает — менять смысла нет. У Нука мало кнопок, они хлипкие, экранчик периодически включается, версия самой бумаги визуально практически неотличима.
НЛО прилетело и опубликовало эту надпись здесь
0
anton_k #
Речь не о том что Нук плохой, а о том что Сони в алюминиевом корпусе, с тремя парами железных качалок, на мой взгляд _замены_ не требует. Если покупать новую ебуку — это уже совершенно другое дело 8)

Нельзя сказать что проблемы с кнопками на Нуке единичны. Скорее всего многие просто пользуются сенсорным экраном для листания.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
0
Tonik #
Уважаемый Ex3NDR, а FBReaderJ тоже вы портировали? Где можно посмотреть исходники? Мне вот сейчас жутко не хватает отображения номера текущей страницы и переход на произвольный номер.
0
Ex3NDR #
исходники выложу чуть позже, если надо сейчас, то напишите в личку свое мыло =)
0
yopopt #
Планируется ли сделать какое-то централизованное хранилище для прошивок? Чтобы была возможность выбирать разные версии или заливать/скачивать пользовательские прошивки.
0
Ex3NDR #
ну будет что-то, кроме нашей — сделаем. Но, ИМХО, не сильно это нужно вообще.
0
pitermark #
у меня был Sony 505
всем хорош — но тормозной
страницы перелистывал медленно
про PDF вообще молчу…

как у NOOK со скоростью дела обстоят?
0
Ex3NDR #
FB2 молниеносно переворачивает.
0
KAdot #
а djvu можно на нем читать?
0
Ex3NDR #
нет.
0
Zharskiy #
а в чём сложность, портировать некому?
0
macgvai #
уже есть mynook.ru/djvu-na-nook-dorabotka-vudroid/
хоть пока и кривовато

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.