AOSP 构建:用默认测试密钥替换我自己的密钥

AOSP building: replace my own keys with default test-keys

我正在构建 AOSP,我想用我自己的密钥对构建进行签名。关于这个过程有一些官方文档 here.

但我想知道我是否可以简单地扭转所有流程并改为执行以下操作:

  1. 删除位于 build/target/product/security
  2. 的默认 android 测试键
  3. 将我的密钥(使用 here 的官方说明生成)放入同名文件夹中。 (假设所有共享、媒体、...都使用一个密钥)

但是这个方法行不通。刻录图像后,系统应用程序(SystemUI、设置等)将停止并持续显示 ANR 对话框。我知道如果系统签名与这些应用程序的签名不匹配,就会发生这种情况...但为什么呢?

另一个问题:使用与 shared.pk8media.pk8testkey.pk8 相同的密钥是否会导致任何问题?

谢谢

首先,确保构建已对应用程序重新签名。您可能需要做一个 make clean 来摆脱以前的工件。

同时检查捆绑系统应用程序的 Android.mk 文件(例如 packages/apps 或您放置它们的任何地方)。你在哪里看到这条线:

LOCAL_CERTIFICATE := PRESIGNED

将其替换为:

LOCAL_CERTIFICATE := platform

这将使构建使用将要检查的密钥对您的系统应用程序重新签名。

虽然对 sharedmediatestkeyplatform 使用相同的密钥将起作用(在您的系统应该启动和运行的意义上),它从使用这些密钥构建的应用程序中删除一层隔离。特别是,通常使用 testkey 签名的非系统应用程序现在将使用与 platform 相同的密钥进行签名。这将使他们能够访问系统应用程序数据和代码,并赋予他们更高的权限(比如不必要求用户确认使用相机或访问他们的文件)。我认为不推荐这样做。

一条建议:

如果您不想将您的私钥与 aosp 代码一起保存在源代码管理中,您可以在您的设备 mk 中定义它们的路径:

PRODUCT_DEFAULT_DEV_CERTIFICATE :=  /home/my_user/release_keys_folder/releasekey
PRODUCT_VERITY_SIGNING_KEY := /home/my_user/release_keys_folder/verity