Отставка system.img на устройстве - PullRequest
15 голосов
/ 28 февраля 2012

Я работаю над решением по автоматическому обновлению приложений для устройств (LG p509 - Optimus 1), которое мы внедряем для наших клиентов.Мы контролируем эти устройства и в настоящее время устанавливаем на них собственное ядро ​​(но не полностью настраиваемое ПЗУ).Поскольку мы пытаемся выполнить автоматическое обновление нашего приложения на устройстве, нам нужно, чтобы система была подписана ключом, который мы контролируем, чтобы мы могли подписывать наши приложения тем же ключом (чтобы получить разрешение INSTALL_PACKAGES).
У меня было несколько проблем с запуском сборок AOSP на устройстве (с использованием выпущенного LG источника для устройства), и я пытаюсь сделать шаг назад и оценить наши варианты.У меня есть несколько вопросов:

  1. Реально ли просто вытащить system.img из телефона и отказаться от содержимого?Если да, где находится системный apk?Я пролистал источник PackageManager, и он использует systempackage (вроде бы «android») для сравнения приложений, чтобы узнать, разрешено ли им иметь системные разрешения.
  2. Кто-нибудь здесь создал пользовательское ПЗУ для устройства, котороемогли бы предложить несколько советов о том, как просто получить нашу подпись в качестве системной подписи?

Любое понимание будет оценено.

Ответы [ 2 ]

15 голосов
/ 01 марта 2012

Хорошо, мы поняли это.Я не буду вдаваться в подробности (слишком много написания), но вот основная суть для любого, кто сталкивается с этим:

Если вы хотите изменить ключ, с которым подписана система, вам нужновыполните следующие действия:

  • Извлечение /system/ dir из работающего телефона
  • Проверьте файлы .apk (из /system/app и /system/framework), чтобы выяснить, какие из нихподписаны тем же ключом, что и framework-res.apk.Я использовал модифицированную версию скрипта , с которой он связан , чтобы выяснить, какие APK нужно подписать.
  • Если APK в /system/app, которые совместно используют ключ подписи с framework-res.apk, являются одексированными, вынужно чтобы деодексировать их .
  • подать в отставку APK и framework-res.apk и упаковать их в update.zip (гугл как это сделать).

На моем конкретном устройстве мне пришлось отказаться от /system/framework/framework-res.apk и /system/framework/lge-res.apk с /system/framework, а также деодексировать и подписать 20 .apks из папки /system/app, чтобы все работало гладко.

8 голосов
/ 28 февраля 2012

"системный апк" - /system/framework/framework.jar. Я никогда не пытался заново подписать образ системы, но я написал код, который был частью образа системы (а не в рамках обычного проекта apk), и он стал частью этого фляги. В этом каталоге есть дополнительные jar-файлы, которые также могут потребовать повторной подписи.

Подпись создается случайным образом и помещается в два файла в вашей среде сборки, build/target/product/security/platform.pk8 и build/target/product/security/platform.x509.pem. Я не знаю, как извлечь их из обычного хранилища ключей, однако я смог скопировать их из одной сборки прошивки в другую, чтобы оба изображения имели одинаковый ключ платформы. Кроме того, я смог изменить подпись APK с помощью этой команды: java -jar signapk.jar platform.x509.pem platform.pk8 Old.apk New.apk. Вы найдете signapk.jar в вашей сборке по адресу out/host/linux-x86/framework/signapk.jar

...