Android AOSP构建:用默认测试密钥替换我自己的密钥
我正在构建AOSP,我想用我自己的密钥对构建进行签名。关于这个过程有一些官方文件 但我想知道我是否可以简单地扭转这一过程,转而做以下事情:Android AOSP构建:用默认测试密钥替换我自己的密钥,android,android-source,android-7.1-nougat,android-signing,Android,Android Source,Android 7.1 Nougat,Android Signing,我正在构建AOSP,我想用我自己的密钥对构建进行签名。关于这个过程有一些官方文件 但我想知道我是否可以简单地扭转这一过程,转而做以下事情: 删除位于build/target/product/security 将我的密钥(使用官方指示生成)以相同的名称放入该文件夹中。(假设所有共享、媒体等都有一个密钥) 但这种方法行不通。刻录映像后,系统应用程序(SystemUI、设置等)将停止并持续显示ANR对话框。我知道如果系统签名与这些应用的签名不匹配,就会发生这种情况。。。但是为什么呢 另一个问题:是否使
build/target/product/security
shared.pk8
,media.pk8
,testkey.pk8
。。。有什么问题吗
谢谢首先,请确保版本已重新签署应用程序。您可能需要执行
清理以清除以前的工件
另外,请检查捆绑系统应用的Android.mk
文件(如软件包/应用
或您可能放置它们的任何地方)。您可以看到这一行:
LOCAL_CERTIFICATE := PRESIGNED
将其替换为以下内容:
LOCAL_CERTIFICATE := platform
这将允许构建使用将要检查的密钥对您的系统应用进行重新签名
当为共享
、媒体
、测试密钥
、平台
使用相同的密钥时,(从您的系统应该启动和运行的意义上讲,平台
将起作用),它将从使用这些密钥构建的应用程序中移除一层隔离。特别是,通常使用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
对我来说,关键的一步是做makeclean
。完成此操作后,替换我的密钥而不是testkey是可以的。我懒得这么做,因为在我的电脑上重建AOSP需要很多时间!感谢我的构建,我使用了一个AWS EC2盒,有96个内核和768M的ram(一个r5.metal
/r5d.metal
实例)。这只野兽需要大约15分钟才能从clean完成完整的AOSP构建。以俄亥俄州现货价格计算,包括启动/传输时间,通常每个构建成本约为0.50美元(外加大约10美元/月的磁盘空间)。