Android系统签名以及生成keystore秘钥

Android系统签名以及生成keystore秘钥Android11系统签名以及keystore一、什么是系统签名Android下所有APP都要进行签名,而有些权限,只有系统签名了的APP可以拥有。而且需要在APP的AndroidManifest中添加以下IDandroid:sharedUserId=”android.uid.system”二、使用signapk.jar签名2.1找到对应文件(1)在根目录下创建keystore文件夹以方便工作(2)查找密钥和证书build/target/product/security/plat

大家好,又见面了,我是你们的朋友全栈君。

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/bash

openssl 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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152006.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • java 添加盲水印_OpenCV-图像处理-频域手段添加盲水印[通俗易懂]

    java 添加盲水印_OpenCV-图像处理-频域手段添加盲水印[通俗易懂][傅里叶变换算法及盲水印实现]盲水印,顾名思义就是看不见的水印。今天我们来说下频域加盲水印。相信大家做过图像处理的对频域、时域、空间域概念都有了一定的了解。空间域,我们日常所见的图像就是空域。空域添加数字水印的方法是在空间域直接对图像操作(之所以说的这么绕,是因为不仅仅原图是空域,原图的差分等等也是空域),比如将水印直接叠加在图像上。频域:描述信号在频率方面特性时用到的一种坐标系。在图像中就是图像…

    2022年10月26日
  • 集群技术概述_集群计算机

    集群技术概述_集群计算机集群技术概述一、集群的起源二、集群的优点1.强扩展能力2.实现方式容易3.高可用性4.易管理性三、集群的类型1.负载均衡集群2.高可用性集群3.高性能集群四、集群的特点1.心跳监测2.漂移IP地址五、集群的应用1.石油地震数据处理2.数值天气预报一、集群的起源        集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发。由于主要用于科学工程计算,所以这些系统并不为大家所熟知。直

    2022年8月31日
  • c字符串截取一部分字符串_截取指定字符串

    c字符串截取一部分字符串_截取指定字符串char*name=”D:/development/MOD09GA/MOD09GAh23v042017001016_16days_unvi.img”; charpath[256]={0}; memcpy(path,name+3,11);//’D:/‘拨移3‘development’拨移11 path[11]=’\0′; printf(“%s”,p…

    2022年10月7日
  • 分布式锁的应用场景和三种实现方式的区别_负载均衡策略

    分布式锁的应用场景和三种实现方式的区别_负载均衡策略多线程对同一资源的竞争,需要用到锁,例如Java自带的Synchronized、ReentrantLock。但只能用于单机系统中,如果涉及到分布式环境(多机器)的资源竞争,则需要分布式锁。分布式锁的主要作用:保证数据的正确性:比如:秒杀的时候防止商品超卖,表单重复提交,接口幂等性。避免重复处理数据:比如:调度任务在多台机器重复执行,缓存过期所有请求都去加载数据库。分布式锁的主要特性:互斥:同一时刻只能有一个线程获得锁。可重入:当一个线程获取锁后,还可以再次获取这个锁,避免死锁发生。高可用:当

    2022年9月8日
  • Java (三) 常量

    Java (三) 常量   今天我们来记录一下java基础之常量,虽然这个很简单很简单,但是我还是喜欢记录下来,因为什么东西都是由开始的不会转变过来的,慢慢的积累最后都是财富,也能做到温故而知新,所以我也会坚持不管多简单或者多难。 1.常量:程序在执行过程中其值是不可以改变的量叫做常量。 2.Java中的常量:Java中常量是分两种的一种是字面值常量一种是面向对象常量,今天我要记载的是字面值常量。…

    2022年7月8日
  • Ubuntu(小名乌班图)的安装顺便附带VMware的安装教程,以及VM的激活密钥[通俗易懂]

    Ubuntu(小名乌班图)的安装顺便附带VMware的安装教程,以及VM的激活密钥[通俗易懂]超级详细的Ubuntu与虚拟机的配置以及虚拟机的激活、安装、创建、配置!!!!!

    2022年9月14日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号