在设备上退出system.img

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

  1. 只要把system.img关掉电话然后辞去内容,是否可行呢? 如果是这样,系统apk位于何处? 我戳穿了PackageManager源代码,它使用了一个系统包(看起来叫做“android”)来比较应用程序,看它们是否被允许拥有系统权限。
  2. 有没有人在这里创build了一个自定义ROM的设备,可以提供一些build议如何让我们的签名是系统签名?

任何有识之士将不胜感激。

Solutions Collecting From Web of "在设备上退出system.img"

好的,所以我们知道了。 我不打算详细(太多的写作),但这是任何人在这个绊脚石的基本要点:

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

  • 从正在运行的手机中提取/system/目录
  • 检查.apk文件(来自/system/app/system/framework ),找出哪些文件是由与framework-res.apk相同的密钥framework-res.apk 。 我使用了此处链接的脚本的修改版本来确定要签名的APK。
  • 如果在/system/app中与framework-res.apk共享签名密钥framework-res.apk已被索引,则需要对它们进行解除索引 。
  • 请辞职APK和framework-res.apk并把它们包装在一个update.zip (谷歌如何做到这一点)。

在我的具体设备上,我不得不从/system/framework同时/system/framework/framework-res.apk/system/framework/lge-res.apk ,还必须从/system/app文件夹,以使一切顺利运行。

“系统apk”是/system/framework/framework.jar 。 我从来没有试图重新签署系统映像,但我已经写了代码是系统映像的一部分(不是在一个正常的apk项目),它成为这个jar子的一部分。 在这个目录中还有其他的jar可能需要重新签名。

签名是随机创build的,并放置在构build环境的两个文件build/target/product/security/platform.pk8build/target/product/security/platform.x509.pem 。 我不知道如何从一个普通的密钥存储区中提取这些数据,但是我已经能够将它们从一个固件版本复制到另一个,以确保两个图像具有相同的平台密钥。 另外,我已经能够使用以下命令更改APK的签名: java -jar signapk.jar platform.x509.pem platform.pk8 Old.apk New.apk 。 你会发现在你的构buildsignapk.jar,在out/host/linux-x86/framework/signapk.jar