20 декабря 2012 г.

Nook Simple Touch: патчим системные файлы и расширяем функционал с NookTouchPatches

Всё бы хорошо в "прокачанном" окружении Nook Simple Touch — рут, гугломаркет, сторонний полноценный лаунчер, любая читалка на выбор — но есть и недостатки, которые не так-то легко исправить. Привычному к Android человеку будет тяжело без выделенных кнопок Назад, Меню и Домой; первые две в оболочке Nook располагаются в верхней панели статуса, но показываются далеко не всегда, а третья всегда открывает стандартную оболочку от B&N. Есть ещё панель инструментов, вызываемая нажатием кнопки N, но она имеет очень мало смысла для любителей стороннего софта, ведь её кнопки вызывают только приложения B&N. Есть много способов справиться с этим ограничением: Button savior для кнопок управления, ReLaunch в качестве лаунчера — для переназначения некоторых пунктов панели инструмента. Но есть и более продвинутый способ: внедрение в систему посредством замечательного набора патчей NookTouchPatches.

Данные патчи расширяют код системных файлов android.policy.jar и services.jar. На данный момент это даёт следующие вкусности:
  • Постоянное отображение кнопок Назад/Меню на строке статуса
  • Отключение drag to unlock на скринсейвере (нет надобности в сторонних прогах) — Nook разблокируется простым нажатием на кнопку N
  • Переназначение кнопок панели инструментов B&N на ЛЮБЫЕ программы и стандартные действия. Нет надобности в обязательной установке ReLaunch, если хочется использовать эти кнопки; поддерживаются все кнопки панели, даже те, что не поддерживает ReLaunch, а также иконка Now reading; очень широкий спектр действий, доступных для назначения: помимо всех установленных программ, есть Назад, Меню, Поиск и множество других.
  • Переназначение физических кнопок на любые программы и стандартные действия; поддерживаются также долгие нажатия.
Всё перечисленное легко и удобно настраивается через специальную программу, никаких ковыряний в текстовых конфигах.
Потекли слюнки? Тогда приступим.

Требования

Для успешного выполнения всех процедур понадобится:
  • На ПК — установленная Java (можно даже минимальный набор, JRE). Версия подойдет любая более-менее актуальная.
  • На Nook — рут, возможность установки сторонних приложений.
  • Поддерживаются версии прошивки NST Glowlight 1.1.5, 1.2.0 и 1.2.1. Есть подтверждения корректной работы данных патчей на Nook без подсветки, однако прошивка должна быть версии 1.2.0 или выше!
  • Поддержка версии прошивки NST Glowlight 1.1.5 прекращена автором. Новые версии патчей рассчитаны только на 1.2.x.
  • Необязательно, но желательно сделать резервную копию содержимого читалки.
Прим. Теоретически, требование наличия рута не обязательно. Доступ ко всем разделам Nook можно получить, загрузив его из-под Noogie на машине с Linux, а установка приложений легко имитируется непосредственной записью apk файла в /data/app. Кроме того, можно также тем или иным способом получить исходные файлы для своей версии прошивки, а для установки их сверстать апдейт для ClockWorkMod recovery и загрузиться из-под CWM. Эти способы я не проверял, но для не желающих рутовать Nook могут подойти.

(ниже следует перевод инструкции с некоторыми адаптациями)
  1. Создайте отдельную папку для манипуляций с файлами — например, nookmods. На всякий случай убедитесь, что в пути к ней нет пробелов и нелатинских символов.
  2. Скачайте и извлеките в папку nookmods файлы из архивов:
  3. Скачайте в папку nookmods следующие файлы:
  4. Скачайте с Nook в папку nookmods файлы /system/framework/android.policy.jar и /system/framework/services.jar и сохраните их под именами android.policy.orig.jar и services.orig.jar соответственно. Можно сделать это через adb, если он настроен; я для простоты скопировал их на самом Nook в раздел /media посредством ES Explorer, а потом перенёс на компьютер, подключив читалку к USB.
    Внимание! Сохраните эти исходные jar файлы, желательно — в нескольких местах (на самой читалке и на ПК). Они пригодятся, когда автор патчей что-то добавит, поскольку сами патчи не инкрементальные, рассчитаны только на применение с оригинальными jar файлами.
  5. Примените патчи:
    • Скачайте в папку nookmods скрипт-автоматизатор и запустите его
    • ЛИБО
    • Запустите командную строку, перейдите в папку nookmods и последовательно выполните следующие команды:

      Декомпиляция и патч policy
      java -jar baksmali.jar -o android.policy android.policy.orig.jar
      patch -p1 < android.policy.patch
      
      Сборка изменённого policy
      7za.exe e android.policy.orig.jar  -oandroid.policy-bin
      java -jar smali.jar -o android.policy-bin\classes.dex android.policy
      cd android.policy-bin
      ..\7za.exe a -mx9 -tzip ..\android.policy.jar *
      cd ..
      
      Декомпиляция и патч services
      java -jar baksmali.jar -o services services.orig.jar
      patch -p1 < services.patch
      Сборка изменённого services
      7za.exe e services.orig.jar  -oservices-bin
      java -jar smali.jar -o services-bin\classes.dex services
      cd services-bin
      ..\7za.exe a -mx9 -tzip ..\services.jar *
      cd ..
      
  6. Если всё прошло благополучно, получите на выходе два пропатченных файла: android.policy.jar и services.jar. Закидывайте их обратно на Nook в папку /system/framework/ любым удобным способом (adb, подключение раздела /system как накопителя и т.д. — я опять же для простоты залил в /media, а оттуда уже на самом Nook с помощью ES Explorer вставил пропатченные файлы). Заодно закиньте файл NookTouchModManager.apk. Проверьте права доступа и владельца у переписанных файлов (обычно в файл-менеджерах это в свойствах файла): они должны быть такие же, как у соседних файлов — владелец root, права доступа -rw-r--r-- (чтение/запись для владельца, чтение для группы, чтение для всех).
  7. Перезагрузите Nook. Не пугайтесь, если загрузка займёт много времени — это только в первый раз, потом будет грузиться быстрее. Думаю, это связано с перестроением кэша приложений.
  8. Установите NookTouchModManager
  9. Наслаждайтесь новыми крутыми фичами :)
Ну и под занавес — пара скриншотов: малая доля из списка действий, которые можно повесить на кнопки N-меню, и само прокачанное меню (да, иконки и названия повешенных на кнопки приложений подхватываются — и это шикарно!)
Обновление от 19.06.2013. Добавлена ссылка на скрипт-автоматизатор (не нужно вводить команды вручную).

Обновление от 12.08.2013. Добавлено про прекращение поддержки 1.1.5 и права доступа.

Обновление от 31.07.2014. Добавлено про оригинальные файлы, физические кнопки.

50 комментариев:

  1. Какая прошивка с гугломаркетом и гмэйлом?

    ОтветитьУдалить
    Ответы
    1. Я ставил GlowNooter (http://forum.xda-developers.com/showthread.php?t=1675706), но можно попробовать NookManager (http://forum.xda-developers.com/showthread.php?t=2040351) с плагином NTGAppsAttack (http://forum.xda-developers.com/showthread.php?t=2086582)

      Удалить
    2. Помогите пожалуйста! Ничего не патчит, пишет всякую фигню:

      "java" не является внутренней или внешней
      командой, исполняемой программой или пакетным файлом.
      patch unexpectedly ends in middle of line
      patch: **** Only garbage was found in the patch input.
      Для продолжения нажмите любую клавишу . . .

      Или такую:

      "java" не является внутренней или внешней
      командой, исполняемой программой или пакетным файлом.
      patching file android.policy/.gitignore
      can't find file to patch at input line 12
      Perhaps you used the wrong -p or --strip option?
      The text leading up to this was:
      --------------------------
      |diff --git a/android.policy/com/android/internal/policy/impl/LockScreen.smali b
      /android.policy/com/android/internal/policy/impl/LockScreen.smali
      |index b7f7e46..d471e36 100644
      |--- a/android.policy/com/android/internal/policy/impl/LockScreen.smali
      |+++ b/android.policy/com/android/internal/policy/impl/LockScreen.smali
      --------------------------
      File to patch:

      Что делать?

      Удалить
    3. так написано же ""java" не является внутренней или внешней
      командой, исполняемой программой или пакетным файлом."
      нужно установить ява
      http://www.java.com/ru/download/windows_xpi.jsp?locale=ru

      Удалить
    4. "Для успешного выполнения всех процедур понадобится:
      На ПК — установленная Java (можно даже минимальный набор, JRE). Версия подойдет любая более-менее актуальная."

      Удалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. Для Nook Simple Touch нет способа разблокировать простым нажатием на кнопку N?

    ОтветитьУдалить
    Ответы
    1. Есть: дополнительный софт. Вот тут инфа про несколько таких программ: http://4pda.ru/forum/index.php?showtopic=261990&st=300#entry9177178. Но можно попробовать поставить данные патчи: теоретически, они должны сработать и для Нука без подсветки

      Удалить
  4. Можно ли использовать вашу доработку для нук симпл тач (без глоулайт) версия 1.2.1 образ от ЗироХаос?

    ОтветитьУдалить
    Ответы
    1. Это очень хороший вопрос :) Вообще, в описании патчей сказано, что они совместимы с версиями 1.2.0/1 и 1.1.5. Поскольку начиная с 1.2.0 B&N свели обе ветки прошивок (для Нуков с подсветкой и без) в одну, эти патчи должны сработать для Нука без подсветки. На практике же пока никто не рискнул. Хотя риск тут минимален, даже если пропатченные файлы не подойдут: всегда можно восстановиться из бэкапа либо заменить файлы на оригинальные. Так что попробуй ;) Главное - про предварительный бэкап не забыть!

      Удалить
    2. Подтверждаю.
      На обычный nook simple touch встаёт без проблем и работает как надо.

      Удалить
    3. Спасибо за тест! Добавил инфу в статью

      Удалить
  5. Какая версия java требуется ?

    ОтветитьУдалить
    Ответы
    1. Любая, добавил в статью

      Удалить
    2. Здравствуйте.Нужен Ваш совет .Проделал все как по инструкции.Файлы пропатчились и благополучно скопированы в system/framework.Установил приложение ,запускаю его и появляется меню настройки конфигурации с пунктами
      -всегда показывать back/menu в статусбаре
      -disaible drag to unlock
      -restore glowlight
      итд.А дальше куда идти,где делать требуемые настройки по кнопке N ?Заранее спасибо за ответ

      Удалить
    3. Привет!
      Это меню второго уровня, надо нажать Back либо стрелочку Назад, меню первого уровня должно выглядеть так:
      Надпись Found modified jars:
      ...
      Кнопка Configure Mod options
      Кнопка Modify Button Actions

      Удалить
    4. У меня нет надписи Found modified jars и кнопка Кнопка Configure Mod options только одна.По ней я и попадаю в меню с пунктами о котором писал ранее.
      приведу лог моих действий-может Вы укажите ,что я делаю не так....
      Microsoft Windows XP [Версия 5.1.2600]
      (С) Корпорация Майкрософт, 1985-2001.

      C:\Documents and Settings\Роман>cd c:\nookmods

      C:\nookmods>java -jar baksmail.jar -o android.policy.orig.jar
      C:\nookmods>java -jar baksmali.jar -o android.policy android.policy.orig.jar
      C:\nookmods>patch -p1 < android.policy.patch
      patching file android.policy/.gitignore
      patching file android.policy/com/android/internal/policy/impl/LockScreen.smali
      patching file android.policy/com/android/internal/policy/impl/ModUtils$Keyinfo.s
      mali
      patching file android.policy/com/android/internal/policy/impl/ModUtils.smali
      patching file android.policy/com/android/internal/policy/impl/PhoneWindowManager
      .smali

      C:\nookmods>7za.exe e android.policy.orig.jar -oandroid.policy-bin

      7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18

      Processing archive: android.policy.orig.jar

      Extracting META-INF
      Extracting META-INF\MANIFEST.MF
      Extracting classes.dex

      Everything is Ok

      Folders: 1
      Files: 2
      Size: 175683
      Compressed: 81525

      C:\nookmods>java -jar smali.jar -o android.policy\classes.dex android.policy

      C:\nookmods>cd android.policy-bin

      C:\nookmods\android.policy-bin>..\7za.exe a -mx9 -tzip ..\android.policy.jar *

      7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
      Scanning

      Creating archive ..\android.policy.jar

      Compressing classes.dex
      Compressing MANIFEST.MF

      Everything is Ok

      C:\nookmods\android.policy-bin>cd..

      C:\nookmods>java -jar baksmali.jar -o services services.orig.jar

      C:\nookmods>patch -p1 < services.patch
      patching file services/.gitignore
      patching file services/com/android/server/PowerManagerService.smali
      patching file services/com/android/server/status/BNGossamerQuickNavbar.smali
      patching file services/com/android/server/status/ModUtils$1.smali
      patching file services/com/android/server/status/ModUtils$2.smali
      patching file services/com/android/server/status/ModUtils.smali
      patching file services/com/android/server/status/StatusBarService.smali

      C:\nookmods>7za.exe e services.orig.jar -oservices-bin

      7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18

      Processing archive: services.orig.jar

      Extracting META-INF
      Extracting META-INF\MANIFEST.MF
      Extracting classes.dex

      Everything is Ok

      Folders: 1
      Files: 2
      Size: 1129743
      Compressed: 524165

      C:\nookmods>java -jar smali.jar -o services-bin\classes.dex services

      C:\nookmods>cd services-bin

      C:\nookmods\services-bin>..\7za.exe a -mx9 -tzip ..\services.jar *

      7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
      Scanning

      Creating archive ..\services.jar

      Compressing classes.dex
      Compressing MANIFEST.MF

      Everything is Ok

      C:\nookmods\services-bin>cd ..

      C:\nookmods>

      Удалить
  6. Очень странно... версии патчей точно совпадают с версией прошивки? Можно еще попробовать снести TocuhModManager, перегрузиться, поставить заново, еще раз перегрузиться

    ОтветитьУдалить
  7. совпадают.У меня нук с подсветкой и установленной сборкой от ZeroChaos .Попробую еще ваши рекомендации

    ОтветитьУдалить
  8. сколько по времени идет загрузка(п.7)?уже 10 минут мигает-загружается

    ОтветитьУдалить
    Ответы
    1. Это уже ненормально. Что-то не так сделал, надо восстанавливаться и делать заново

      Удалить
    2. Это уже ненормально. Что-то не так сделал, надо восстанавливаться и делать заново

      Удалить
    3. Это уже ненормально. Что-то не так сделал, надо восстанавливаться и делать заново

      Удалить
  9. поменял права и владельца, и все заработало, спасибо!

    ОтветитьУдалить
    Ответы
    1. Во, точно, у многих с этим бывают проблемы. Хотя мне это странно. Каким способом заливал файлы на девайс?

      Удалить
    2. Во, точно, у многих с этим бывают проблемы. Хотя мне это странно. Каким способом заливал файлы на девайс?

      Удалить
  10. Помогите, не получается пропатчить, вот что выскакивает
    (пробовал на другом компьютере, тоже самое)

    в программе PowerShell

    Windows PowerShell
    (C) Корпорация Майкрософт, 2009. Все права защищены.

    PS C:\Users\Администратор> e:
    PS E:\> cd nookmods
    PS E:\nookmods> java -jar baksmali.jar -o android.policy android.policy.orig.jar
    PS E:\nookmods> patch -p1 < android.policy.patch
    Оператор "<" зарезервирован для дальнейшего использования.
    строка:1 знак:12
    + patch -p1 < <<<< android.policy.patch
    + CategoryInfo : ParserError: (<:OperatorToken) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported


    через команду cmd

    Microsoft Windows [Version 6.1.7601]
    (c) Корпорация Майкрософт (Microsoft Corporation), 2009. Все права защищены.

    C:\Users\Администратор>e:

    E:\>cd nookmods

    E:\nookmods>java -jar baksmali.jar -o android.policy android.policy.orig.jar

    E:\nookmods>patch -p1 < android.policy.patch
    patch unexpectedly ends in middle of line
    patch: **** Only garbage was found in the patch input.

    ОтветитьУдалить
  11. Если есть возможность попробуйте пропатчить
    Вот моя папочка nookmods с моими оригинальными файлами android.policy.jar и services.jar
    http://yadi.sk/d/2SL8uRtU74PxE

    ОтветитьУдалить
    Ответы
    1. Всё патчится, версии патчей должны соответствовать версии прошивки

      Удалить
  12. Впервые встречаюсь с подобными вещами и никогда не патчила. Объясните пожалуйста доходчиво чайнику вот такие вещи:
    -открыла командную строку - как дальше выполнять команды? Просто копипастить код в 5 пункте?
    -зачем на ПК устанавливать Java? чтобы форматы поддерживались или как?
    - а эти вещи - android.policy.patch и services.patch - у меня просто открываются в отдельных вкладках. Что с ними делать?

    Спасибо заранее.

    ОтветитьУдалить
    Ответы
    1. - Да, просто построчно копировать в окно командной строки и выполнять
      - Java нужна для работы программ по сборке/разборке jar файлов, к сожалению, без ее установки не обойтись
      - Это нормально, т.к. они обычные текстовые файлы. Надо их просто сохранить.

      Удалить
    2. Можно также использовать скрипт-автоматизатор (добавил ссылку на него перед пунктом с перечислением команд)

      Удалить
  13. все нормально. но почему-то картинки иконок, которые появляются при нажатии кнопки n остались те же. приложения запускаются новые, а картинки те же.. как поменять картинки?

    ОтветитьУдалить
    Ответы
    1. Мне для этого понадобилось перезагрузить девайс

      Удалить
  14. Spell, Благодарю за патчи!
    На Nook Simple Touch (без подсветки) + update до 1.2.1 + root от ZeroLab + ядро c Multitouch-Flashmod-USBhost - патчи встали без проблем! Все работает! И способ разблокировать простым нажатием на кнопку N ! Была "обрезанная" читалка, а стала Супертаблетка!

    ОтветитьУдалить
  15. Здравствуйте, большое вам спасибо за статью, крайне полезная вещь, установил, все работает.
    Но у меня возник один вопрос: у вас на самом последнем скрине экрана видно что внизу по кнопке "n" разворачивает выбор из шести слотов. А при запуске NookMod в настройках "Modify Button Actions" у меня выбор только в том чтобы навесить приложение или действие на любой из пяти стандартных Quicknav: Home-Library-Shop-Search-Setting. Где же собака зарыта ? :)

    ОтветитьУдалить
    Ответы
    1. У меня Nook Glowlight, там +1 кнопка собственно для подсветки :)

      Удалить
    2. Ах вот же чёрт :-) Ну, ладно, обойдусь и пятью... :-)
      Еще раз спасибо за понятное изложение материала :-)

      Удалить
  16. Подскажите, что делать! Не дает скопировать файлы обратно в /system/framework
    Говорит, что the file system is read-only. Не дает в самом фале поменять права доступа и владельца (владелец не root).

    ОтветитьУдалить
    Ответы
    1. Доступ к /system с самого Нука возможен только под рутом. Как вариант можно загрузить Нук из-под Noogie, подключить к Линуксу и там вставить изменённые файлы.

      Удалить
  17. При этом файлы патчей видны как android.policy.patch.txt в командной строке.

    ОтветитьУдалить
    Ответы
    1. Файлы должны иметь расширение .patch, а не .txt.

      Удалить
  18. При попытке закинуть в нужную папку пропатченные файлы, выдает ошибку. Я полагаю, что в следствии отсутствия прав. Рут есть, в свойствах информацию о правах не нашел.

    Как быть, посоветуйте?

    Столько манипуляций уже проделал(

    ОтветитьУдалить
    Ответы
    1. Надо подключить папку для записи, в Root explorer есть выделенная кнопка для этого, в ES - опция в настройках

      Удалить
  19. Этот комментарий был удален автором.

    ОтветитьУдалить
  20. А как изменить рисунок и надпись в нижнем, выезжающем баре? Dropbox поставил, а показывает Shop и иконка тоже его.

    ОтветитьУдалить
    Ответы
    1. Обычно требуется перезагрузить читалку.

      Удалить
  21. Здравствуйте !
    Очень нужна помощь в таком вопросе: в моём Нуке отказал сенсор (работает только вверху экрана). В принципе он мне и не нужен - я могу листать боковыми кнопками, но встала проблема разблокировки. Данная проблема решилась тем, что я установил прошивку ZeroLab и Нук стало возможным разблокировать нажатием на "подковку" внизу и последующим нажатием боковой левой верхней "палочки". Но теперь проблема попасть в библиотеку и открыть любую книжку. В принципе после установки ZeroLab и разблокировки в верхнем левом углу горит значок книжечки и нажав на него (сенсор то у меня вверху работает) открывается "Руководство пользователя Nook". Вот у меня вопрос: возможно ли какими-то действиями в программных файлах сделать так, чтоб нажатием на этот значок открывалось не Руководство, а какая-либо книга из памяти библиотеки, которую я задам командой ? Или может есть более простые способы обходится полностью без сенсорного управления на книжке ?
    Буду очень признателен за ваши советы.

    ОтветитьУдалить
    Ответы
    1. Можно настроить эту кнопочку на открытие любой программы в патчах, но не уверен, что это возможно сделать без сенсора.
      Можно подключить через шнур usb-otg мышь и сделать нужные манипуляции, однако чтобы она заработала, нужна программа, в которой тоже как-то надо нажать кнопки.
      Либо можно запустить adb через wifi или поставить сервер удаленного администрирования (например, VNC) и по wifi рулить книгой с компа. Это, по идее, можно сделать без сенсора.
      А пробовал чистить кромки экрана? Часто бывает, что они забиваются пылью, и сенсор перестает действовать.

      Удалить
  22. Спасибо. Про вытирание я знаю - так два года назад решал проблему. Сейчас же отказал нижний сенсор окончательно. Решил проблему так. Попросил у знакомого такую же читалку, открыл на ней книгу на первой странице, а потом вышел на титульный экран. В левом верхнем углу появился значок открытой книжечки при нажатии на который открывается книга которую ты читал. Потом я сделал бэкап его читалки и залил на свою. Теперь при разблокировке я могу нажать на указанный выше значок и открыв книгу могу её читать листая кнопками. Проблему открытия других книг решил таким способом - после того, как книга прочитана, я присоеденяю Нук к компу и закидываю новую книгу, но строго с таким же именем файла, какой имела прочитанная книга (операция "копировать с заменой"). И у меня уже новая книга готовая к чтению. В принципе меня такой вариант вполне устраивает :)

    ОтветитьУдалить