17

我正在为我们部署给客户的设备 (LG p509 - Optimus 1) 开发自动应用程序更新解决方案。我们控制了这些设备,目前在它们上安装了自定义内核(但不是完整的自定义 ROM)。由于我们正在尝试在设备上自动更新我们的应用程序,因此我们需要使用我们控制的密钥对系统进行签名,以便我们可以使用相同的密钥对我们的应用程序进行签名(以获得 INSTALL_PACKAGES 权限)。
我在设备上运行 AOSP 构建时遇到了一些问题(使用 LG 发布的设备源代码),我试图退后一步并评估我们的选择。我有几个问题:

  1. 将 system.img 从电话中拔出并退出内容是否可行?如果是这样,系统 apk 位于何处?我浏览了 PackageManager 源,它使用一个系统包(似乎称为“android”)来比较应用程序,看看它们是否被允许拥有系统权限。
  2. 这里有没有人为设备创建了一个自定义 ROM,可以就如何让我们的签名成为系统签名提供一些建议?

任何见解将不胜感激。

4

2 回答 2

15

好的,所以我们想通了。我不打算详细介绍(写太多),但对于任何偶然发现此问题的人来说,这里是基本要点:

如果要更改系统签名的密钥,您需要执行以下步骤:

  • /system/从正在运行的手机中提取目录
  • 检查.apk文件(来自/system/app/system/framework)以确定哪些文件由与framework-res.apk. 我使用此处链接的脚本的修改版本来确定要签名的 APK。
  • 如果/system/app共享签名密钥的 APKframework-res.apk被 odex,您需要对它们进行 deodex
  • 退出 APK 并将framework-res.apk它们打包update.zip(谷歌如何做到这一点)。

在我的特定设备上,我必须同时退出/system/framework/framework-res.apk/system/framework/lge-res.apk/system/framework必须.apks/system/app文件夹中解压缩并签名 20,以使一切顺利运行。

于 2012-02-29T21:35:05.243 回答
8

“系统 apk”是/system/framework/framework.jar. 我从未尝试重新签署系统映像,但我编写的代码是系统映像的一部分(不在普通的 apk 项目中),它成为了这个 jar 的一部分。此目录中还有其他 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

于 2012-02-28T02:47:21.067 回答