[ Android 编译 ] 如果不指定LOCAL_CERTIFICATE,默认使用哪个key进行签名

2023-11-14

[ Android 编译 ] 如果不指定LOCAL_CERTIFICATE,默认使用哪个key进行签名?

尊重原创,转载请注明出处!
创作不易,如有帮助请点赞支持~

参考:
Android系统签名简介

开发系统应用时,通常情况下我们都会在 Android.mk 中通过 LOCAL_CERTIFICATE 声明应用签名所用的密钥。尤其是当指定 android:sharedUserId="android.uid.system" 时,必须通过 LOCAL_CERTIFICATE := platform 使用 platform key 对应用进行签名。

最近在开发调试的时候,发现 Launcher3 应用的 Android.mk 并没有声明 LOCAL_CERTIFICATE,那么它到底是使用哪个 key 进行签名的呢?

通过简单的测试可以得出结论,在未修改源码编译环境的情况下,系统源码中编译的应用,如果没有指定 LOCAL_CERTIFICATE

1、在 user 模式下就是用 build/target/product/security/releasekey.x509.pem 进行应用签名。

2、在 eng / userdebug 模式下用 build/target/product/security/testkey.x509.pem 进行应用签名。

默认情况下使用的证书路径是在这里定义的 build/core/config.mk

# The default key if not set as LOCAL_CERTIFICATE
ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE
  DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
else
  DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey
endif

也就是说,如果在源码中定义了 PRODUCT_DEFAULT_DEV_CERTIFICATE 的环境变量,就会使用它作为默认的证书路径。如果没指定 PRODUCT_DEFAULT_DEV_CERTIFICATE,则使用 build/target/product/security/testkey 作为默认的证书路径。

通过查找资料,发现在 system/sepolicy/private/keys.conf 中还定义了不同编译模式下使用的默认密钥:

[@PLATFORM]
ALL : $DEFAULT_SYSTEM_DEV_CERTIFICATE/platform.x509.pem

[@MEDIA]
ALL : $DEFAULT_SYSTEM_DEV_CERTIFICATE/media.x509.pem

[@NETWORK_STACK]
ALL : $MAINLINE_SEPOLICY_DEV_CERTIFICATES/networkstack.x509.pem

[@SHARED]
ALL : $DEFAULT_SYSTEM_DEV_CERTIFICATE/shared.x509.pem

# Example of ALL TARGET_BUILD_VARIANTS
[@RELEASE]
ENG       : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
USER      : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem

最后,这个 DEFAULT_SYSTEM_DEV_CERTIFICATE 到底是在哪里用到的呢?

答案是 build/make/core/package_internal.mk,它判断了当 LOCAL_CERTIFICATE 为空时,使用 $(DEFAULT_SYSTEM_DEV_CERTIFICATE) 进行签名。

ifeq ($(LOCAL_CERTIFICATE),)
    LOCAL_CERTIFICATE := $(DEFAULT_SYSTEM_DEV_CERTIFICATE)
endif

分析到这里,其实就可以验证上面的结论了:

1、在 user 模式下,系统源码中编译的应用,如果没有指定 LOCAL_CERTIFICATE,默认情况下就是用 build/target/product/security/releasekey/releasekey.x509.pem 进行应用签名。

2、在 eng / userdebug 模式下,系统源码中编译的应用,如果没有指定 LOCAL_CERTIFICATE,默认情况下就是用 build/target/product/security/releasekey/testkey.x509.pem 进行应用签名。

进一步扩展,可以得到以下结论:

1、如果自己公司的产品需要维护一套自己生成的密钥,可以在 makefile 中通过 PRODUCT_DEFAULT_DEV_CERTIFICATE 环境变量指定自己的证书路径。包括 platform / media / release 等签名都是使用该路径下的证书

2、如果想要在修改 eng / userdebug / user 编译模式下使用的默认密钥,可以修改 system/sepolicy/private/keys.conf,配置不同编译模式下使用的默认密钥

注:这里经过测试,发现只要指定了 PRODUCT_DEFAULT_DEV_CERTIFICATE,那么无论在 user 还是
userdebug 模式下,默认使用的都是 PRODUCT_DEFAULT_DEV_CERTIFICATE 只有在未指定
PRODUCT_DEFAULT_DEV_CERTIFICATE 的情况下,eng / userdebug 模式下才会使用
testkey 作为默认密钥

遗留问题:
上面指定的 DEFAULT_SYSTEM_DEV_CERTIFICATE 都是 build/target/product/security/testkeybuild/target/product/security/releasekey,也就是直接指定的密钥类型。

但是在 keys.conf 中通过 DEFAULT_SYSTEM_DEV_CERTIFICATExxxkey.x509.pem 进行拼接,此时 DEFAULT_SYSTEM_DEV_CERTIFICATE 应该指定的是密钥文件所在目录才对?

这个问题查了半天没搞懂,暂时不管了。有哪位朋友知道的可以指点一下,谢谢~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[ Android 编译 ] 如果不指定LOCAL_CERTIFICATE,默认使用哪个key进行签名 的相关文章

随机推荐

  • cron linux_如何在Linux中使用cron

    cron linux 本文最初发布于2017年11月 现已更新以包含其他信息 成为系统管理员的挑战 其中有很多优点 之一是当您想睡觉时正在运行任务 例如 某些任务 包括定期重复执行的任务 需要在没有人使用计算机资源的情况下通宵运行或在周末运
  • 211和985区别:

    985工程 是在 211工程 的基础上 根据我国国防 民用 东 中 西部协调发展的原则而筛选出来的
  • 获取网页的html文本(用selenium+chrome headless进行js异步加载内容),返回BeautifulSoup的soup对象

    import requests from bs4 import BeautifulSoup from selenium import webdriver def gethtml url js False if js False return
  • 1.代码片断收集-数据拷贝效率问题

    上面是我创建的群聊 欢迎新朋友的加入 1 基本信息 mycode 收录一些简单的代码片段 Gitee com 克隆链接 mycode 收录一些简单的代码片段 目的 记录和收集一些常用的代码片段 同时也欢迎网友提交push申请 共同完善 开发
  • 05C++11多线程编程之使用正确的共享代码案例引入互斥量mutex的概念、用法

    05C 11多线程编程之使用正确的共享代码案例引入互斥量mutex的概念 用法 1 共享代码案例概念分析 1 网络游戏服务器 两个自己创建的线程 一个线程收集玩家命令 一个数字代表玩家发来的命令 并把命令写到一个队列中 另外一个线程从队列中
  • 基于pytorch的无需分割字符的车牌识别

    传统车牌识别 传统的车牌识别需要先检测出车牌 检测出车牌后通过 像素映射 或者 联通区查找 的方法分割出单个的文字 然后单独识别每个文字 传统的车牌识别不仅繁琐 而且切割文字的效果也很难令人满意 因此 能不能绕开字符分割的问题 直接识别车牌
  • 系分 - 系统安全分析与设计

    个人总结 仅供参考 欢迎加好友一起讨论 文章目录 系分 系统安全分析与设计 考点摘要 对称加密 非对称加密 信息摘要 数字签名 数字证书 数字信封 PKI公钥体系 网络安全 安全协议 网络安全 网络威胁与攻击 防火墙 功能 防火墙 分类 防
  • Matlab遗传算法工具箱及应用

    目录 第一章 遗传算法概述 1 1遗传算法概念 1 2遗传算法与爬山法的比较 1 3遗传算法的基本原理与方法 第二章 遗传算法应用举例 2 1简单一元函数优化实例 参考资料 Matlab遗传算法工具箱及应用 主编 雷英杰 张善文 西安电子科
  • SpringBoot——加载测试专用的配置类

    加载测试专用的配置类 之前我们介绍了如何在测试类中加载专用的测试属性 这次我们来看如何在测试类中加载专用的测试类 创建配置类 首先创建一个配置类 并且创建一个第三方的Bean模拟这是一个要在测试用例中引用的第三方Bean 创建测试用例 创建
  • LTE小区搜索过程及SCH/BCH设计

    终端开机过程 在小区搜索之前 需要完成PLMN的选定 再去搜索小区相关信息 PLMN 公共陆地移动网络 是一个标识 由MCC和MNC组成 比如中国电信46011 460是MCC 11是MNC 两个标识都是2 3位 那终端是如何搜索PLMN的
  • WIN7环境下cmd javac不是内部或外部命令

    一般步骤如下 网上摘抄部分 JAVA HOME指明JAVA安装路径 值设为 C Program Files Java jre7 刚才安装时所选择的路径 每个人可能不一样 此路径下包括lib bin jre等文件夹 Path值设为 JAVA
  • GNU __attribute__ 机制

    http blog 163 com sunm lin blog static 9192142200741533038695
  • 在服务器跑vue不能访问?是你的host设置问题

    看了csdn的一堆文章 大都是部署的 也就是 经过了 npm run build 之后 打包好的压缩工程部署 比如 https blog csdn net weixin 43690623 article details 122718677
  • Ubuntu开机后卡死只有左上角有一个下划线不停闪烁

    千万不要乱设置东西 先按一下Ctrl Alt F2打开tty模式检查问题出在哪了 之后会让你输入用户名和密码 就平时开机正常登录那样 然后相当于进入了一个平时用的终端 只是这个终端占据了整个屏幕 平时用的指令都可以用 接着你去检查到底出了什
  • myisamchk命令使用总结

    author sakte time 2012 02 28 myisamchk命令使用总结 myisamchk实用程序可以用来获得有关你的数据库表的统计信息或检查 修复 优化他们 1 常用于myisamchk的检查选项 information
  • 自定义ViewGroup实现控件自动换行

    首先看效果如下 首先我们需要自定义ViewGroup 重写onMeasure和onLayout将布局摆放好然后在通过适配器添加子view 代码如下 public class MyViewGroup extends ViewGroup Lis
  • jetson nano安装mqtt库

    把包放入Work下 sudo apt get update sudo apt get install build essential gcc make cmake cmake gui cmake curses gui sudo apt ge
  • 如何在Kubernetes集群中使用kubectl工具来进行管理多个外部K8S集群接入与资源操作?...

    关注 WeiyiGeek 公众号 设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 本章目录 0x03 Kubernetes 中多集群接入管理实践 1 本地集群创建指定用户管理集群 2 外部集群创建指定用户管理集群 原文
  • linux-vmware tools安装与cdrom挂载

    前述 昨天想直接复制虚拟机centos系统中命令行的内容到主机的txt文档上进行保存 发现不能实现虚拟机与主机之间的直接通讯 后来查资料发现原来是由于我的虚拟机没有安装vwmare tools的缘故 一个下午查资料下来 搞定了cdrom镜像
  • [ Android 编译 ] 如果不指定LOCAL_CERTIFICATE,默认使用哪个key进行签名

    Android 编译 如果不指定LOCAL CERTIFICATE 默认使用哪个key进行签名 尊重原创 转载请注明出处 创作不易 如有帮助请点赞支持 参考 Android系统签名简介 开发系统应用时 通常情况下我们都会在 Android