在设备上退出system.img

问题描述 投票:0回答:2

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

  1. 是否可以直接将system.img从手机上拉下来并放弃其中的内容?如果是,系统 apk 位于哪里?我浏览了 PackageManager 源代码,它使用一个系统包(似乎称为“android”)来比较应用程序,看看它们是否被允许拥有系统权限。
  2. 这里有没有人为设备创建了一个自定义ROM,可以提供一些关于如何让我们的签名成为系统签名的建议?

任何见解将不胜感激。

android android-source lg optimus
2个回答
15
投票

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

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

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

在我的特定设备上,我必须从

/system/framework/framework-res.apk
中退出
/system/framework/lge-res.apk
/system/framework
,并且还必须从
.apks
文件夹中删除并签署 20
/system/app
,以使一切顺利运行。


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

© www.soinside.com 2019 - 2024. All rights reserved.