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系统签名简介

目录
相关文章
|
2月前
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
2月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
28天前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
30天前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
3月前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
92 15
Android 系统缓存扫描与清理方法分析
|
2月前
|
监控 Java Android开发
深入探讨Android系统的内存管理机制
本文将深入分析Android系统的内存管理机制,包括其内存分配、回收策略以及常见的内存泄漏问题。通过对这些方面的详细讨论,读者可以更好地理解Android系统如何高效地管理内存资源,从而提高应用程序的性能和稳定性。
82 16
|
2月前
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。
|
2月前
|
算法 JavaScript Android开发
|
2月前
|
安全 搜索推荐 Android开发
揭秘安卓与iOS系统的差异:技术深度对比
【10月更文挑战第27天】 本文深入探讨了安卓(Android)与iOS两大移动操作系统的技术特点和用户体验差异。通过对比两者的系统架构、应用生态、用户界面、安全性等方面,揭示了为何这两种系统能够在市场中各占一席之地,并为用户提供不同的选择。文章旨在为读者提供一个全面的视角,理解两种系统的优势与局限,从而更好地根据自己的需求做出选择。
120 2
|
3月前
|
安全 搜索推荐 Android开发
深入探索安卓与iOS系统的差异及其对用户体验的影响
在当今的智能手机市场中,安卓和iOS是两大主流操作系统。它们各自拥有独特的特性和优势,为用户提供了不同的使用体验。本文将深入探讨安卓与iOS系统之间的主要差异,包括它们的设计理念、用户界面、应用生态以及安全性等方面,并分析这些差异如何影响用户的使用体验。