Android 11系统签名以及keystore

一、什么是系统签名

Android系统中,所有的APP都需要签名,来保证报名在设备上是唯一的,避免相同包名应用被覆盖;系统签名意味着对于将这个APP视为系统APP,具有更高的权限,比如可以开机自启动,从后台启动activity等。

同时需要在AndroidManifest中指定sharedUserId

android:sharedUserId="android.uid.system"

sharedUserId的作用:同一ID下的应用可以共享数据,也可以运行在同一进程。

二、使用signapk.jar签名

2.1 找到对应文件

(1) 在根目录下创建keystore文件夹以方便工作

(2)查找密钥和证书

build/target/product/security/platform.x509.pem
build/target/product/security/platform.pk8

prebuilts/sdk/tools/linux/lib64/libconscrypt_openjdk_jni.so

out/host/linux-x86/framework/signapk.jar

把上述文件移到同一个文件夹,比如(1)中创建的文件夹keystore中

(3)android studio生成没有签名的apk文件

点击:Build->Build Bundle(s)/APK(s)->Build APK(s)

并将project的工程目录的app/build/intermediates/apk/debug/app-debug.apk拷贝到keystore目录下

(4)运行以下命令

java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 app.apk app_sign.apk

三、生成keystore以供客户使用

上述方式,需要我们将SDK和秘钥都给到客户,这种方式不但不安全,而且使用起来不方便,需要客户有linux环境。

并且下述这种方式可以直接在Android Studio下使用,所以推荐使用以下方式。

3.1 找到对应密钥文件

build/target/product/security/platform.x509.pem
build/target/product/security/platform.pk8

3.2 生成密钥脚本

执行之前,先确保有安装openssl,并soure build/envsetup.sh和lunch

#!/bin/bashopenssl pkcs8 -in platform.pk8  -inform DER -outform PEM -out shared.priv.pem -nocrypt
openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -password pass:pass:pkcs12passwd -name androidentry
keytool -importkeystore -deststorepass password1 -destkeypass password2  -destkeystore shared.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass pkcs12passwd  -alias androidentry

3.3 对于生成密钥过程中的解释

(1)将DER格式转换为PEM格式的证书,这一步不需要输入密码

openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt

这一步作用:将DER格式转换为PEM格式的秘钥

nocrypt:不加密,直接转换

inform:输入格式

outform:输出格式

in:输入证书

out:输出证书

(2)生成pkcs12格式的证书

注:-password 要和后面的srcstorepass一致

-name 要和后面的-alias一致

openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -password pass:pkcs12passwd -name androidentry

这一步作用:将platform.x509.pem 用shared.priv.pem和加密,获得shared.pk12 ,在其内创建秘钥入口并加上密码

name:秘钥的入口名

password:秘钥加密的密码

inkey:给证书加密的秘钥

in:输入的证书

(3)生成keystore

keytool -importkeystore -deststorepass password1 -destkeypass password2 -destkeystore shared.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass pkcs12passwrd -alias androidentry

**这一步作用:使用密码解锁秘钥,并使用key store密码和key密码对shared.pk12进行入口加密,生成keystore **

importkeystore:生成秘钥

deststorepass:指定key store密码

destkeypass:指定key 密码

srckeystore:指定源秘钥

destkeystore:目标秘钥

srcstoretype:源秘钥类型

srcstorepass:源秘钥入口密码

alias:源秘钥入口

(4)keystore包含的内容

最终shared.keystore里面包含了一个入口androidentry,需要用key store密码和key密码进行访问,访问成功,就可以用里面的platform.x509.pem对自己的APP进行加密。

四、AndroidStudio下使用

待更新,百度有很多

五、检测方法

没有系统签名的APK在使用了shardUserId为android.uid.system的时候是无法安装的,所以直接安装就可以知道。
实在不放心,可以用ps -A | grep xxx.xxx.xxx查看,xxx.xxx.xxx为你的app包名,如果看到使用者是system就说明是系统签名应用。

六、已知问题

在ubuntu22.04下使用keytool生成keystore是会失败的,提示keystore password was incorrect

Android系统签名以及生成keystore秘钥相关推荐

  1. Android 打包签名 从生成keystore到完成签名

    首先,我们需要一个keystore,当然已经有了的话就不用这一步了: cmd下: 进入到jdk的bin目录,这样的话,android.keystore文件就会生成在这个目录下,签名的时候我们需要这个文 ...

  2. Android系统签名生成Studio导入系统keystore

    一.Android签名文件简述 为什么要签名? 任何一个安装包都需要有签名.为App签名的本质是说明这个App是我开发的,不是别人.通过签名可以在应用和开发者之间建立可信任的关联. 通过签名,Andr ...

  3. iOS RSA加密 以及生成公钥 秘钥 pem文件

    在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...

  4. 国密:生成SM2秘钥、加解密及加验签

    国密改造已经持续了很长时间了,相信很多从事金融科技类的程序猿都遇到过这个需求.这篇文章就为大家带来笔者对于国密改造的一些经验,主要是代码层面,有兴趣的同学可以研究下国密的算法模型! 注:本文所用到的工 ...

  5. git生成SSH秘钥(git报错git@github.com: Permission denied (publickey). Could not read from remote repositor)

    事情是这样,公司的电脑本来更新代码,拉取代码是没有任何问题的,昨天下班回家后想着把代码拉下来看看,然后在云效上面看到之前生成的秘钥,有好几个之前设置的秘钥,感觉好像没有用手贱给删掉了,早上来公司想着拉 ...

  6. 在windows生成SSH秘钥连接linux远程主机

    前言:在windows主机中生成ssh秘钥,然后分别用远程工具与命令行去通过秘钥连接远程服务器:并实现在远程服务器中添加多个不同客户端的秘钥,以此来实现不同客户端都可以使用秘钥连接远程服务器.本次实验 ...

  7. java生成AES秘钥

    import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypt ...

  8. android 自动重启测试,检测Android系统重启并生成测试用例的方法与流程

    本发明涉及软件技术领域,特别是一种检测Android系统重启并生成测试用例的方法. 背景技术: 目前安卓智能设备的功能越来越多,例如安卓智能电视或安卓智能盒子等,而在不同功能间交叉操作有概率触发And ...

  9. Android 生成原生系统签名jks 与 keystore

    在漫长的Android开发生涯中难免需要实现某个系统应用的系统功能,比如,appstore的静默安装,静默卸载 这两个功能对app的权限是有要求的,app必须是系统级别的应用才行,每个厂商的定制不同, ...

  10. KeyStore秘钥库

    keytool 在打包Android APK的时候进行签名需要选择一个keystore,查看秘钥库: C:\Users\47355\.android>keytool -list -v -keys ...

最新文章

  1. css新闻列表优化-突破思维新方法更利于搜索引擎
  2. Adobe Captivate 2019中文版
  3. 在 Linux 上创建一个加密文件保险库
  4. 使用thymeleaf中超链接失效
  5. Selenium webdriver中的xpath定位
  6. 第十九章:李丽质入狱
  7. 数据库创建联合主键(MySql)
  8. python自加1_使用Python如何让里面的某个参数每调用一次程序就自加1
  9. 服务器基础设置:服务器设置PXE启动,
  10. 渗透测试专业术语——防守篇
  11. 通信LOGO隐秘史(续集:运营商篇)
  12. vs2010 solidworks2015 c# add-in模板 二次开发
  13. 「兔了个兔」玉兔踏青,纯CSS实现瑞兔日历(附源码)
  14. 【AtCoder】AtCoder Grand Contest 045
  15. Multisim的元器件模型的更换
  16. 【人工智能】如何看待人工智能技术的变革与未来? 分10个方面来详细展开谈谈,不少于5000字。
  17. 缺口将达230万!大数据人才求职需要注意这些
  18. 凤凰网对话金山云CEO王育林:未来互联网80%内容都将视频化
  19. DBA的4个基本技能和运维的7个基本技能
  20. 中级嵌入式系统设计师2014下半年上午试题及答案解析

热门文章

  1. 无人机项目跟踪记录七十七----蓝牙模块详解
  2. win 安装 Xshell 5
  3. en55032最新标准下载_欧盟新EMC标准EN55032将强制实施
  4. LayUI文档和技术支持网站
  5. 微信扫一扫登录(使用小程序实现)
  6. win10固态硬盘分区 整数_固态硬盘先装系统还是先4k对齐?
  7. FFMpeg学习记录:X264编码器
  8. 建筑能源管理系统主要有什么功能?
  9. phpcms url伪静态
  10. python刷屏代码_python 刷屏