Android签名 (二) 制作签名文件

2023-05-16

你可能想知道 通过这篇博客可以解决哪些问题以及学到什么:

  1.公司开发一个新的app,如何创建一个应用签名?

  2.为了安全性,Android系统不想使用Google给的原生签名,如何定制系统签名?

这篇博客介绍了如何制作签名文件,首先介绍Android开发中使用到的签名文件类型,然后介绍系统签名如何制作,最后介绍不同IDE用到的签名文件如何制作。

目录

一、Android的签名文件有三种类型,分别在以下情况使用

1.  jks: 用于Android Studio编译

2.  keystore: 用于Eclipse编译

3.  pk8/x509.pem   : 用于Android系统的编译

二、制作pk8/x509.pem格式系统签名文件

1.准备环境

2.制作过程

3.使用自定义签名

4.检查自定义签名 

三、制作jks格式的签名文件

四、制作keystore格式的签名文件


一、Android的签名文件有三种类型,分别在以下情况使用

1.  jks: 用于Android Studio编译

全称为Java key store,jks也是Android Studio中创建签名文件的格式

2.  keystore: 用于Eclipse编译

最早开发Android的时候的签名文件,目前开发Android都使用AS,而AS也兼容keystore.

3.  pk8/x509.pem   : 用于Android系统的编译

这个是系统的签名文件,同样也可以给APK签名

二、制作pk8/x509.pem格式系统签名文件

1.准备环境

需要在linux系统中,且有编译Android源码的环境

2.制作过程

1)生成签名文件

要对Android系统进行签名,需要生成四种类型的key文件:

  • a) releasekey
  • b) media
  • c) shared
  • d) platform

我们就拿releasekey 为例简单介绍下生成过程

使用Android源码中自带的make_key工具来生成签名,路径为development/tools/make_key 

在Android系统源码根目录下,新建make_key_security目录,进入到该目录,执行下面的命令

  ../development/tools/make_key releasekey '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'

执行命令时都会提示输入密码,这时不要输入密码,直接按Enter健;你想想如果在编译Android系统过程中要你不断输入密码进行确认,你是不是会疯掉!!!如下就会在make_key_security目录中生成密钥对 releasekey.pk8 (私钥) / releasekey.x509.pem (公钥)

Jack:~/aosp/make_key_security$ ../development/tools/make_key releasekey '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
Enter password for 'releasekey' (blank for none; password will be visible): 
creating releasekey.pk8 with no password
Generating RSA private key, 2048 bit long modulus (2 primes)
....................................................................................................+++++
....+++++
e is 65537 (0x010001)
Can't load /home/ecarx/.rnd into RNG
139895179936192:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/ecarx/.rnd

Jack:~/aosp/make_key_security$ ls
releasekey.pk8  releasekey.x509.pem

同样步骤将命令中的releasekey换成 media/shared/platform,然后执行,生成的所有秘钥对如下:

Jack:~/aosp/make_key_security$ ls -l
总用量 40
-rw------- 1 ecarx ecarx 1217 8月  14 23:45 media.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8月  14 23:45 media.x509.pem
-rw------- 1 ecarx ecarx 1218 8月  14 23:44 platform.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8月  14 23:44 platform.x509.pem
-rw------- 1 ecarx ecarx 1218 8月  14 23:30 releasekey.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8月  14 23:30 releasekey.x509.pem
-rw------- 1 ecarx ecarx 1217 8月  14 23:45 shared.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8月  14 23:45 shared.x509.pem

2)介绍一下make_key的参数   

../development/tools/make_key releasekey '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'

这里要顺便介绍下make_key的参数。第一个参数是要生成key的名字第二个参数是关于你公司的信息。key的名字很好理解,就是前面提到的4中类型的key,公司信息的参数比较多,它们的含义如下:

KeyDescriptionExample
CWhat is the two-letter country code for this unit?US
STWhat is the name of your State or Province?California
LWhat is the name of your City or Locality?Mountain View
OWhat is the name of your organization?Android
OUWhat is the name of your organizational unit?Android
CNWhat is your first and last name?Android
emailAddressWhat is the email address?android@android.com

3.使用自定义签名

1) 修改 /build/core/config.mk 中定义变量:

DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/releasekey  

2) 修改 /build/core/Makefile 中定义变量:

ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)
BUILD_KEYS := release-keys
else
BUILD_KEYS := dev-keys
endif

4.检查自定义签名 

查看签名文件信息: 

Jackchen:~/aosp/make_key_security$ keytool -printcert -file releasekey.x509.pem 
所有者: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
发布者: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
序列号: 2c5386028cf9208120dcb735e63e6ce31e57faf7
生效时间: Sat Aug 14 23:30:08 CST 2021, 失效时间: Wed Dec 30 23:30:08 CST 2048
证书指纹:
     SHA1: 6A:72:69:63:9D:07:13:09:35:9C:22:31:6C:A1:C8:74:CF:FE:F1:8B
     SHA256: 45:AF:80:A8:10:AD:80:C2:71:C9:97:8A:D6:CC:FA:D0:AB:69:BA:B3:CE:80:94:D5:D0:70:63:E8:71:B0:06:CE
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

build.prop中可以查看到变量:

  ro.build.tags=release-keys  

三、制作jks格式的签名文件

1.用Android Studio生成签名文件

这个网上教材很多,我引用了两位博主的文章

在Android Studio创建keystore签名文件_TinkTan的博客-CSDN博客_android studio 创建keystore

Android Studio生成keystore签名文件_安妍妍的博客-CSDN博客_android studio 生成签名文件

之前我会一直困惑为什么创建jks签名文件时要输入两套秘密(不是确认秘密哦),后来经过查阅资料和实操验证终于弄懂了,这里和大家分享以下:

你可以将jks理解为一个仓库,一个密钥仓库,其实keystore这个名字就很直观,访问这个仓库需要一个秘密; 这个仓库里面可以存放很多很多key,所以每一个key都需要有一个自己的名字alias,访问每个key都需要密码aliaspasswd,下面通过示意图说明:

 2.从系统签名文件转化而来

1)获取android平台key
   取源码目录build\target\product\security下platform.pk8 platform.x509.pem放到一个目录中 

2)生成platform.pem 
   openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem

3)生成pkcs12
   openssl pkcs12 -export -in  platform.x509.pem -inkey platform.pem -out platform.p12  -password pass:<key_pwd> -name <key_alias>

<key_pwd>  签名key的密码,下一步需要用到(对应pkcs12的密码)
<key_alias> 签名key的别名,下一步需要用到


4)生成debug.jks
   keytool -importkeystore -deststorepass <store_pwd> -destkeystore <store_name> -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass <key_pwd> -alias <key_alias>

<store_pwd>         签名文件(jks/keystore)的密码;
<store_name>      签名文件(jks/keystore)名称;
<key_pwd>            签名key的密码;
<key_alias>           签名key的别名;

以上步骤就生成了platform.jks就直接可以用于Android Studio签名了,用到的命令如下:

openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
openssl pkcs12 -export -in  platform.x509.pem -inkey platform.pem -out platform.p12  -password pass:key_password -name key_alias
keytool -importkeystore -deststorepass store_name -destkeystore debug.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass key_password -alias key_alias

另外还将以上这些命令写成了一个脚本,只要将platform.pk8 platform.x509.pem放到对应目录下,然后运行脚本,输入对应参数即可,下载连接

四、制作keystore格式的签名文件

1.从系统签名文件转化而来

    和制作jks的步骤相同

如果要查看生成的签名文件里面的签名信息,可以参考我的另外一篇博客

Android签名 (一) 查看签名信息

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

Android签名 (二) 制作签名文件 的相关文章

  • 云服务的三种模式:SaaS、PaaS、IaaS

    云服务的三种模式 1 SaaS xff08 软件即服务 xff09 SaaS xff08 Software as a Service xff09 xff0c 即软件即服务 提供给消费者完整的软件解决方案 xff0c 你可以从软件服务商处以租
  • 三种方式实现Java生产者与消费者

    一 什么是生产者与消费者 生产者与消费者是java并发环境下常见的设计模式 xff0c 一个线程负责生产数据 xff0c 一个线程负责消费数据 xff0c 两个线程同时去操作这个变量 xff0c 但是这是两个相互互斥的操作 二 代码演示 1
  • XML解析为Document对象

    XML解析为Document对象 我们在上一篇Spring源码分析中有提到 xff0c Spring是将xml文件的InputStream转换为DOM树 xff0c 然后在将DOM树解析转换为BeanDefinition从而注册bean x
  • java生产者消费者模型

    前言 生产者和消费者问题是线程模型中的经典问题 xff1a 生产者和消费者在同一时间段内共用同一个存储空间 xff0c 生产者往存储空间中添加产品 xff0c 消费者从存储空间中取走产品 xff0c 当存储空间为空时 xff0c 消费者阻塞
  • 医疗保健领域的 7 个拯救生命的 AI 用例。从早期疾病检测到增强医疗决策再到更好的患者治疗效果——这就是人工智能技术如何改变医疗保健行业。

    目录 1 肺部疾病的 AI 辅助胸部 X 线分析 新冠肺炎 肺癌 2 黑色素瘤的皮肤科扫描 3 人工智能和机器学习的 CT 和 MRI 扫描分析 4 人工智能辅助乳腺癌检测 5 数字病理学的人工智能 6 使用自然语言处理实现医疗保健管理任务
  • poj3101——Astronomy(大数数学&gcd)

    Astronomy Time Limit 2000MS Memory Limit 65536KTotal Submissions 5932 Accepted 1337 Description There are n planets in t
  • E: Unable to correct problems, you have held broken packages

    E Unable to correct problems you have held broken packages 问题 xff1a apt install libmysqlclient dev Reading package lists
  • 【MySQL】mysqldump 数据库备份mysqldump: Got error: 1449: The user specified as a definer ('root'@'%') do......

    在Linux中使用corntab 定时备份MySQL数据库 xff0c 后期因考虑安全性问题 xff0c 删除掉了 root 64 用户 xff0c 发现环境上备份报错了 mysqldump Warning Using a password
  • Android 同个工程 复制后生成两个不同的apk

    需求 xff1a 同时运行两个完全相同工程 xff0c 我们会发现手机上面只有一个apk文件 xff1f 解决 xff1a 其实我们可以改变一个工程里面的build gradle中的applicationId 的值就可以了 等再次运行两个工
  • Linux下Centos7 安装 docker总结

    本片博客只介绍在linux系统上的安装方法 本文使用 CentOS 7 6 版本 1 root权限更新Yum包 xff08 linux命令不熟悉的同学本文建议使用root权限登陆安装docker xff0c 省去很多不必要麻烦 xff09
  • 完美解决KindEditor手机弹出框显示问题

    完美解决KindEditor手机弹出框显示问题 kindeditor是非常方便简单使用的富文本编辑器 xff0c 也很符合国人的习惯 xff0c 尤其是表情等应用 xff0c 但是kindedtor在手机上的显示也是一个比较头疼的问题 xf
  • Ubuntu 18.04 设置开机自启脚本

    一 背景 同伴在频繁更新系统环境 xff0c 需要经常使用reboot命令重启 xff0c 但每次重启后端Jar都会停止 xff0c 每次重启都需要手动启动Web后端Jar包 针对此种情况 xff0c 想到了采用开机自动启动Jar包的方法来
  • 本地打印机获取以及文件打印 java

    选择相应的文件进行打印 span class hljs comment 打印文件的选择 span JFileChooser fileChooser 61 span class hljs keyword new span JFileChoos
  • sqlite 句柄-sqlite 基础教程(3)

    要操纵一个数据库你就得有一个这个数据库的句柄 又碰到这个难以理解的词了 xff0c 不过确实还没得一个更好的词来替代它 其实你跟本不需要去在乎这个词叫什么 xff0c 你只要搞清楚他是一个什么玩意儿 就如同鞋子为什么叫鞋子 xff0c 仔细
  • Python justswap自动化交易

    因为平时要在justswap上做一些自动化交易 xff0c 网上资料很少 xff0c 看了justswapapi文档之后 xff0c 发现只需要调用合约的方式就可以了 遂共享出自己的代码 span class token keyword f
  • RabbitMq学习笔记(五)—— Topic

    ReceiveTopicOne 匹配规则 span class hljs number 1 span span class hljs comment 声明交换器和队列 span channel exchangeDeclare EXCHANG
  • ViewBinding - Jetpack 视图绑定委托封装及使用示例

    通过视图绑定功能 xff0c 您可以更轻松地编写可与视图交互的代码 在模块中启用视图绑定之后 xff0c 系统会为该模块中的每个 XML 布局文件生成一个绑定类 绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用 在大多数情况下
  • LiveData 的生命周期 - viewLifecycleOwner / this

    在给定所有者的生命周期内将给定的观察者添加到观察者列表中 事件在主线程上调度 如果 LiveData 已经有数据集 xff0c 它将被传递给观察者 方法 xff1a observe LifecycleOwner Observer 使用示例
  • 设计模式——生产者消费者模式

    1 基本概括 2 主要介绍 2 1 概念 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题 生产者和消费者彼此之间不直接通讯 xff0c 而通过阻塞队列来进行通讯 xff0c 所以生产者生产完数据之后不用等待消费者处理 xff
  • Arch linux安装deepin-wine和微信(wechat)

    一 保证有国内的镜像源 xff0c 不然下载很慢 xff0c 没有国内包的镜像源 xff0c 则软件列表会少很多国内的软件 如果没有国内镜像源 xff0c 请修改镜像源 sudo vim etc pacman d mirrorlist s

随机推荐

  • KVM虚拟化(一)

    一 KVM虚拟化架构 1 主流虚拟机架构 图中对比了几种主流虚拟化技术架构 xff1a ESXi Xen与KVM xff0c 其主要差别在与各组件 xff08 CPU 内存 磁盘与网络IO xff09 的虚拟化与调度管理实现组件有所不同 在
  • docker Centos 7 安装 xfce4 桌面 + x11vnc + novnc

    docker Centos 7 安装 xfce4 桌面 43 x11vnc 43 novnc 启动容器环境变量xfce4 桌面安装 启动 Xvfb安装 启动 xfce4 桌面 x11vnc安装 x11vnc启动 x11vnc novnc 上
  • linux C++ 环境下的ActiveMQ学习

    ActiveMQ 1 概述 ActiveMQ 是Apache出品 xff0c 最流行的 功能强大的即时通讯和集成模式的开源服务器 ActiveMQ 是一个完全支持JMS1 1和J2EE 1 4规范的 JMS Provider实现 提供客户端
  • LUbuntu16.10安装及自动使用root登录(Ubuntu类似)

    LUbuntu是一款新的轻量级Ubuntu发行版 xff0c 结合LXDE使得LUbuntu安装 运行速度极快 xff0c 硬件资源要求很低 xff0c 支持X86和ARM架构处理器 可以在http lubuntu net 根据自己电脑的系
  • 【源码分享】-wpf界面源代码分享

    好久以前做过一段时间的界面编程 C 43 43 C Wpf的都做过一点 xff0c 见 个人博客中UI类目 所以资料里面关于界面编程的代码会多一些 xff0c 有时间就整理发出来共享学习 13年的时候用WPF写过一个简单的小程序作爬虫来获取
  • 十大 Python GUI 框架比较

    图形用户界面 GUI 是任何 Web 应用程序中最重要的部分之一 有人会说最重要的部分 xff0c 因为今天的老练用户很快就会放弃可用性差的应用程序 Python 应用程序也是如此 新手 Python 程序员在掌握了 Python 编程的基
  • 如何用ps将图片修改成指定大小

    这篇文章主要介绍如何用ps将图片修改成指定大小 xff1a 一 按原像素比例 修改图片的尺寸 1 先来看看它原来的尺寸 xff0c 如图所示 500X481px 2 首先用ps将图片文件打开 xff0c 使用ps菜单命令 xff1a lt
  • docker 安装rabbitMQ(最详细)

    docker 安装rabbitMQ 1 rabbitMQ介绍 RabbitMQ是一套开源 xff08 MPL xff09 的消息队列服务软件 xff0c 是由 LShift 提供的一个 Advanced Message Queuing Pr
  • 阿里云-ECS云服务器跨地域部署k8s集群

    阿里云 ECS云服务器跨地域部署k8s集群 一 背景介绍二 环境准备2 1 ECS云服务资源清单2 2 K8s软件列表 三 阿里云ECS服务器网络问题3 1 问题阐述3 2 解决方案 四 服务节点调整 xff08 master xff0c
  • 代码命名规范是一种责任也是一种精神(工匠精神)

    代码命名规范之美 规范概述命名规范管理类命名BootstrapProcessorManagerHolderFactoryProviderRegistrarEngineServiceTask 传播类命名ContextPropagator 回调
  • Kubernetes集群搭建(高可用)附全自动脚本

    高可用Kubernetes集群搭建 一 前言介绍 1 1 重要概念 二 系统架构 2 1 架构基本需求 2 2 架构图 三 环境准备 3 1 云服务或虚拟机清单 3 2 网络配置 针对使用vmware虚拟机用户需要操作 3 3 虚拟机网络设
  • k8s 集群部署ingress-nginx

    k8s 集群部署ingress nginx 环境准备 helm方式安装ingress nginx master边缘节点 创建命名空间和部署ingress 第一个ingress 例子 查看ingress controller配置 其实就是对应
  • k8s 集群部署traefik

    k8s 集群部署traefik k8s 集群部署traefik 环境准备 下载traefik helm方式安装traefik master边缘节点 执行安装 查看安装结果 安装traefik dashboard dashboard安装和查看
  • Linux系统(Centos)安装tomcat和部署Web项目

    文章结构 1 准备工作 2 在Linux下安装Tomcat8 0 3 Linux中配置tomcat的服务器启动和关闭和配置tomcat的开机启动 4 给tomcat配置用户名和密码登录 5 使用IDEA打包Maven托管的WEB项目 6 将
  • 如何判断蓝牙设备类型

    我们在开发Android的蓝牙应用时 xff0c 可能需要知道扫描到的蓝牙设备是什么类型 xff0c 然后过滤掉不符合要求的设备 xff0c 只保留符合要求的设备 xff0c 例如我们在车载系统上开发蓝牙电话应用时 xff0c 我们希望只显
  • Aspose.Words for Java 体验

    公司中要做一些导出word的工作 xff0c 经别人推荐 xff0c 使用了Aspose Words for Java xff0c 感觉很好用 xff0c 美中不足的地方就是 xff0c 它是收费软件 原理吗 xff1f 比较常规 xff0
  • 汽车制造行业OEM Tier1 Tier2指代什么?

    OEM OEM是Original Equipment Manufacturer的缩写 xff0c 通常指设备厂商 主机厂 整车厂 例如 xff1a 宝马 奔驰 奥迪 大众 丰田 国内汽车主机厂排名前十分别是上汽集团 东风汽车 北京汽车 长安
  • Android应用系统签名方法

    1 应用配置sharedUserId 在AndroidManifest xml文件根节点中加入属性 xff1a android sharedUserId 61 34 android uid system 34 2 找到系统签名文件 plat
  • Android 读取CPU/GPU运行参数(MTK平台)

    一 使用场景 Android运行一段世时间后 xff0c 系统出现卡顿 二 分析 amp 定位问题 系统卡顿 xff0c 同时又发现芯片温度很高 xff0c 怀疑是温度过高导致CPU降频 xff0c 因此我们要将一段时间内CPU的运行信息打
  • Android签名 (二) 制作签名文件

    你可能想知道 通过这篇博客可以解决哪些问题以及学到什么 xff1a 1 公司开发一个新的app xff0c 如何创建一个应用签名 xff1f 2 为了安全性 xff0c Android系统不想使用Google给的原生签名 xff0c 如何定