1

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

但我想知道我是否可以简单地扭转所有这些过程,而不是做这些事情:

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

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

shared.pk8另一个问题:使用与, media.pk8, , ...相同的键是否testkey.pk8会导致任何问题?

谢谢

4

2 回答 2

1

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

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

LOCAL_CERTIFICATE := PRESIGNED

用这个代替它:

LOCAL_CERTIFICATE := platform

这将使构建使用它们将被检查的密钥重新签署您的系统应用程序。

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

于 2019-09-16T17:17:25.083 回答
1

一个建议:

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

PRODUCT_DEFAULT_DEV_CERTIFICATE :=  /home/my_user/release_keys_folder/releasekey
PRODUCT_VERITY_SIGNING_KEY := /home/my_user/release_keys_folder/verity
于 2019-09-19T20:36:31.010 回答