有关Android的keyStore
2018-06-02 本文已影响330人
34sir
作用
keyStore有什么作用?
- 程序升级
新旧版本的数字证书相同时 Android系统才会认为这是同一程序的不同版本 如果数字证书不同 会 产生冲突 要求更改包名 - 程序的模块化和开发
拥有同一签名的程序可以运行在同一进程中 可以分模块开发 用户在需要的时候下载对应的模块 - 多个程序间共享数据和代码
Android 提供了基于数字证书的权限赋予机制 如果某个权限(permission
)的protectionLevel
是signature
则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序
默认的keyStore
首先 我们得知道Android studio 有他默认的keyStore 存在的位置: $HOME/.android/debug.keystore
默认的相关密码如下:
//配置keystore签名
signingConfigs {
release {
storeFile file("debug.keystore") // as默认的keystore
storePassword "android" // keystore 默认的打开密码
keyAlias "androiddebugkey" // 默认的别名
keyPassword "android" // 默认的别名密码
}
}
buildTypes {
debug {
signingConfig signingConfigs.release
}
release {
signingConfig signingConfigs.release
}
}
生成自己的keyStore
这里有两种方式:
Generate Signed APK
Generate0.png Generate1.png Generate2.png图Generate2中标记出来的部分 v2是Android7.0新支持的特性 如果只勾选v2 那么由此数字签名打出来的包在Android7.0以下将没办法使用
v1 v2 有什么不同?
- v1 通过ZIP条目进行验证 这样APK签署后可以进行许多修改 可以移动或者重新压缩文件
- v2 验证压缩文件的所有字节 而不是单个的ZIP条目 因此 签名后无法再修改(包括
zipalign
) 所以在编译过程中 将压缩调整还有部署一步完成 这样的好处:更安全 新的签名可以缩短在设备上的验证时间(不需要费时的解压缩验证) 从而加快了安装速度
v1 v2怎么选择?
全选就对了
- 只选v1 Android7.0以上不会做更安全的验证
- 只选v2 Android7.0以下无法安装
也可以利用gradle
进行配置:
signingConfigs {
debug {
v1SigningEnabled true
v2SigningEnabled true
}
release {
v1SigningEnabled true
v2SigningEnabled true
}
}
一键生成
bat批处理一键生成:
keytool -genkey -dname "CN=Name, OU=Unit, O=Organization, L=City, ST=Province, C=Country" -alias Android -keyalg RSA -validity 2000 -keystore Android.keystore -storepass 123456789 -keypass 123456789
注释:
CN=Name 您的姓名
OU=Unit 您的单位
O=Organization 您的组织
L=City 您的城市
ST=Province 您的省份
C=中国 您的国家,默认为中国
-alias Android 证书别名
-keyalg RSA 秘钥加密算法
-validity 2000 有效期(天数)
-keystore Android.keystore 秘钥文件全称[生成],要求绝对存储路径,如:D:\Android\Android.keystore
-storepass 123456789 密钥库存储密码
-keypass 123456789 秘钥专用密码