gradle进行apk签名打包

阅读数:171 评论数:0

跳转到新版页面

分类

python/Java

正文

默认为debug mode, 使用的签名文件在: $HOME/.android/debug.keystore

Android系统在安装APK的过程中,会对APK进行签名检验, 校验通过后才能安装成功.

数字摘要

1. 唯一性

在不考虑碰撞的情况下, 不同的数据的计算出的接要是不同的.

2. 固定长度

比较常用的Hash算法有MD5和SHA1, MD5的长度是128位, SHA1的长度是160位.

3.不可逆性

签名和校验的大体过程

签名就是要摘要的基础上再进行一次加密, 对摘要加密后的数据就可以当作数字签名, 在安装Apk时需要对签名进行验证, 验证通过才能继续安装.

 

数字证书

数字证书是身份认证机构颁发的, 接收到消息后, 先向CA机构验证证书的合法性, 再进行签名校验.

需要注意的是, Apk的证书通常是自签名的, 也就是由开发者自己制作, 没有向CA机构申请, 这也是对第三方apk重新签名后, 还能继续在没有安装这个apk的系统中继续安装的原因.

keystore和证书格式

我们在对apk签名时并没有直接指定私钥 公钥和数字证书, 而是使用keystore文件, 这些信息都包含在了keystore文件中.根据编码不同, keystore文件分为很多种, Android使用的是Java标准keystore格式JKS(Java Key Storage).

keystore使用的证书标准是X.509, X.509标准也有很多种编码格式, 常用的有两种: pem( Privacy Enhanced Mail)和der(Distinguished Encoding Rules), JKS使用的是der格式.

jarsigner和apksigner

Android提供了两种对Apk的签名方式, 一种是基于JAR的签名方式( 使用keystore文件), 另一种是基于Apk的签名方式( 除了支持keystore,还支持直接指定pem证书文件和私钥进行签名),

我们通过keytool或者AS生成一个keystore的时候,  输入的keystore的密码是用于保护keystore本身的, 另外的输入的alias和key是用于密钥和证书的.

签名相关的命令

● jarsigner签名
jarsigner -keystore keystore_file -signedjar signed.apk unsigned.apk alias_name -storepass pwd
 
● apksigner签名
java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk
 
● 查看keystore文件
keytool -list  -v -keystore keystore_file -storepass pwd
 
● 查看apk证书
keytool -printcert -jarfile apk
 
● 查看DER格式证书(META-INFO/CERT.RSA)
openssl pkcs7 -inform DER -in CERT.RSA -noout -print_certs -text
 
● 查看PEM格式证书
openssl x509 -in cert.x509.pem -text -noout
 
● apksigner检查apk是否签名,以及查看证书SHA1值
apksigner verify -v --print-certs

生成数字证书

cd到项目目录, 证书在目录生成

 keytool -genkey -v -keystore dao_flashcard.keystore -alias flashcard -keyalg RSA -validity 20000

(1) -genkey表示执行的是生成数字证书操作, -v表示将生成证书的详细信息打印出来.

(2) -keyalg RSA表示生成密钥文件所采用的算法是RSA

(3)-validatity 20000表示该证书的有效期为20000天.

 

执行gradle 命令, $ gradlew assembleRelease




相关推荐

程序启动图标(Logo)\底部菜单图标 小屏ldpi() 36x36 px 中屏mdpi(160dpi) 48x48 px 大屏hdpi(240dp

一、预备知识 Fragment必须嵌入到Activity中, 当Activity暂停时, 其中的所有片段也会暂停, 当Activity被销毁时,所有片段也会被销毁. 不过,  当Activity正在运

该属性是当一个view获取焦点时, 定义ViewGroup和其子控件两者之间的关系, 属性的值有三种: (1) beforeDescendants: viewgroup会优先其子控

只有在LinearLayout时, 该属性才有效. android:layout_w

gravity的中文意思就是"重心", 就是表示view横向和纵向的依靠位置. a

android webview从Lollipop(5.0)开始webview默认不允许混合模式, https当中不能加载http资源, 而开发的时候可能使用的是https的链接, 但是链接中的图

从网上查找资料,发现有多种方式, 我用了其中最简单的方式: 使用java.lang.String的replace方法, <pre class="language-marku

在Anrdoid自定义View时候,需要使用TypedArray来获取XML layout中的属性值,使用完之后,需要调用recycle()方法将TypeArray回收。 那么Ty

当我们的项目的某些属性和第三方库中属性有冲突或者我们想修改第三方库中某些资源时,我们就需要使用tools:replace来处理。 1、有冲突的情况 比如第三方库中

在Android中,使用Span定义文本的样式,通过Span改变几个文字的颜色,Span能够改变TextPaint属性,在Canvas上绘制,甚至是改变文本的布局和影响行高这样的元素。Span是