Android 系统生成 releasekey

简介: Android 系统生成 releasekey

1、android 系统签名文件目录在


build/target/product/security


其中包含的签名文件有,media.pk8,media.x509.pem;platform.pk8,platform.x509.pem;releasekey.pk8,releasekey.x509.pem;shared.pk8,shared.x509.pem;testkey.pk8,testkey.x509.pem


2、签名文件生成方法,看到目录中的 README 文档


The test keys in this directory are used in development only and should
NEVER be used to sign packages in publicly released images (as that would
open a major security hole).
key generation
--------------
The following commands were used to generate the test key pairs:
  development/tools/make_key testkey  '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
  development/tools/make_key platform '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
  development/tools/make_key shared   '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
  development/tools/make_key media    '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'


通过 development/tools/ 下的 make_key 命令可以生成独一无二的 key,各个参数的含义如下


C —> Country Name (2 letter code)

ST —> State or Province Name (full name)

L —> Locality Name (eg, city)

O —> Organization Name (eg, company)

OU —> Organizational Unit Name (eg, section)

CN —> Common Name (eg, your name or your server’s hostname)

emailAddress —> Contact email address


一般不要输入密码,引出不必要的问题,直接回车。生成 key 后,拷贝至 build/target/product/security/新建文件夹/


例如 build/target/product/security/tencent/ 目录下,原来的 test相关 key 保留


3、修改 android 编译时默认签名使用 tencent/ 目录下


DEFAULT_SYSTEM_DEV_CERTIFICATE 默认 release

build/make/core/Makefile

-ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
-BUILD_KEYS := test-keys
+# ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
+# BUILD_KEYS := test-keys
+ifeq ($(findstring release,$(DEFAULT_SYSTEM_DEV_CERTIFICATE)), release)
+BUILD_KEYS := release-keys
 else


指定签名文件为 tencent 下的 releasekey

build/make/core/config.mk

DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
 else
-  DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey
+  # DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey
+  DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/tencent/releasekey
 endif

system/sepolicy/private/keys.conf

system/sepolicy/prebuilts/api/26.0/private/keys.conf

-ENG     : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
-USER      : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
-USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
+ENG       : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
+USER      : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
+USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem


4、查看签名apk的签名信息


keytool -printcert -jarfile xxx.apk

使用这个命令能够查看apk所使用签名的相关信息,如下图所示


aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2ktYmV0YS8xNjA0MTk1LzIwMjAwMy8xNjA0MTk1LTIwMjAwMzA4MjMwMDIxNDEzLTYxNDIwMzU4MC5wbmc.png

5、系统不同签名文件的区别


sharedUserId


每个apk或文件,系统都会分配属于自己的统一的用户ID(UID),创建沙箱保证其他应用的影响或影响其他应用。如:一般应用只能访问自己包名下的文件(/data/data/pkgname),不能反问其他包名下的,其他应用也访问不了自己包名下的文件。

sharedUserId,拥有同一user id的应用 之间就可以共享数据库和文件,相互访问。这些应用可以运行在同一进程,也可以运行不同进程。


sharedUserId与签名文件


只有拥有相同sharedUserId标签的,且拥有相同签名的 应用才能分配相同的用户ID,实现数据共享。如果仅仅拥有相同sharedUserId标签,是无法确保安全的,也很容易被非法利用。


系统中5类签名文件说明


platform:平台的核心应用签名,签名的apk是完成系统的核心功能。这些apk所在的进程UID是system。manifest节点中有添加android:sharedUserId=“android.uid.system”。


media: 这个签名的apk是media/download的一部分。manifest节点中有添加android:sharedUserId=“android.media”。


shared:这个签名的apk可以和home/contacts进程共享数据。manifest节点中有添加android:sharedUserId=“android.uid.shared”。


testkey/releasekey:平台默认key。在编译中未指定LOCAL_CERTIFICATE的,默认是用testkey。因为testkey是公开的,任何人都可以获取,不安全,所以一般使用 自己创建releasekey作为默认key


6、更换 release 签名后 ota 升级错误日志


finding update package…

opening update package…

verifying update package…

installing update…

Source : alps/full_k37tv1_64_bsp/1583399226:eng/release-keys

Target : alps/full_k37tv1_64_bsp/1583972248:eng/release-keys

verifying current system…

Devices was remounted R/W 1 times

Last remount happened on Tue Jan 1 00:01:27 2019

E1004: system partition fails to recover

E:Error in @/cache/recovery/block.map(Status 7)


Installation aborted.


因为编译验证的 eng 版本,而且通过 adb remount 过,所以校验失败。

解决办法重新烧写,不要 remount,再次 ota 成功升级


7、android 源码制作jks签名文件


三条指令搞定,先进入签名文件目录 /build/target/product/security

1\  openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
2\  openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:123456 -name xxx
3\  keytool -importkeystore -deststorepass 123456 -destkeystore platform.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass 123456
  storePassword '123456'
  keyAlias 'xxx'
  keyPassword '123456'


参考文章


Android系统签名简介

目录
相关文章
|
1月前
|
Android开发
Android 如何将定制的Launcher成为系统中唯一的Launcher
Android 如何将定制的Launcher成为系统中唯一的Launcher
46 2
|
1月前
|
机器学习/深度学习 Java Shell
[RK3568][Android12.0]--- 系统自带预置第三方APK方法
[RK3568][Android12.0]--- 系统自带预置第三方APK方法
169 0
|
13天前
|
存储 监控 调度
Android系统服务:WMS、AMS相关知识
参考文献 Android窗口管理服务WindowManagerService计算Activity窗口大小的过程分析 Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析 Android窗口管理服务WindowManagerService对输入法窗口(Input Method Window)的管理分析 Android窗口管理服务WindowManagerService显示窗口动画的原理分析
|
17天前
|
Java Linux Android开发
Android面试题之说说系统的启动流程(总结)
这篇文章概述了Android系统的启动流程,从Boot Rom到Zygote进程和SystemServer的启动。init进程作为用户级别的第一个进程,负责创建文件目录、初始化服务并启动Zygote。Zygote通过预加载资源和创建Socket服务,使用fork函数生成SystemServer进程。fork过程中,子进程继承父进程大部分信息但具有独立的进程ID。Zygote预加载资源以减少后续进程的启动时间,而SystemServer启动众多服务并最终开启Launcher应用。文中还讨论了为何从Zygote而非init或SystemServer fork新进程的原因。
24 2
|
24天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的安卓的微博客系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的安卓的微博客系统附带文章和源代码部署视频讲解等
27 2
|
6天前
|
安全 搜索推荐 Android开发
探索安卓和iOS系统的优劣与特点
在移动操作系统领域,安卓和iOS一直是最热门的两个选择。本文将探讨安卓和iOS系统的优劣与特点,帮助读者更好地了解这两个操作系统,并为选择合适的移动设备提供参考。
12 0
|
1月前
|
Android开发
【通讯录教程】苹果安卓鸿蒙系统通用,如何大批量导入手机号码到手机的通讯录,下面教你方法,只需1分钟搞定几万个号码的导入手机电话本
该文介绍了一种快速批量导入手机通讯录的方法,适用于处理大量手机号的需求,如微商管理、客户资料整理等。在QQ同步助手开始收费后,提供了免费的替代方案。步骤包括:下载批量导入软件(链接提供腾讯云盘和百度网盘地址),清空通讯录(非必需),制作符合格式的通讯录文件,并按操作系统(苹果、安卓或鸿蒙)进行导入。整个过程只需1分钟,简便快捷。
|
17天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的安卓的微博客系统的详细设计和实现
基于SpringBoot+Vue+uniapp的安卓的微博客系统的详细设计和实现
11 0
|
1月前
|
安全 搜索推荐 物联网
构建未来:基于Android的智能物联网家居系统
【5月更文挑战第15天】 在快速发展的数字化时代,智能物联网(IoT)技术与移动操作系统的结合正在塑造未来家居的生活方式。特别是Android平台,以其开放性、灵活性和广泛的用户基础,成为智能家居创新的理想选择。本文将探讨如何利用Android系统构建一个高效、安全且易于扩展的智能家居控制系统,涵盖系统设计、关键技术实现以及可能面临的挑战。通过分析具体案例,我们旨在为开发者和企业提供一套可行的解决方案蓝图,以促进智能家居领域的进一步发展。
|
1月前
|
存储 缓存 Android开发
Android系统分区与升级
Android系统分区与升级
57 4