欠伸展肢体,吟咏心自愉。这篇文章主要讲述Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.6——签署发布apk相关的知识,希望能为你提供帮助。
问题:
为了将APK发布到google市场,需要对APK数字签名。
解决方案:
可以使用java的keytoll命令去创建一个证书,并且在gradle配置文件的signingConfigs块使用。
讨论:
所有的APK在发布之前都必须签名。默认的,android用一个已知的key对测试的APK进行签名。你可以使用java的keytool命令行看到。
debug的密钥存储在home目录下的一个叫.android的目录下。密钥的默认名叫debug.keysore,并且有一个android密码。
在命令行输入
cd ~/.android/,然后输入keytool -list -keystore debug.keystore,默认密码android,可以看到密钥信息:
文章图片
密钥类型是JKS(Java KeyStore,公钥和私钥)。java支持另一种叫JCEKS(Java Cryptography Extensions KeyStore)的类型,这是用于共享密钥,但不是用于android应用。
这个密钥有一个别名叫androiddebugkey的用于给测试APK签名的证书。
PS:重置测试密钥,只需要删除debug.keystore,在你下次部署应用的时候,会重新生成。
你不可以发布一个没有签名的app。这也可以使用keytool。如下:
keytool -genkey -v -keystore myapp.keystore -alias my_alias -keyalg RSA -keysize 2048 -validity 10000(all on one line) Enter keystore password:(probably shouldn\'t use use "password") Re-enter new password:(but if you did, type it again) What is your first and last name? [Unknown]:Ken Kousen What is the name of your organizational unit? [Unknown]: What is the name of your organization? [Unknown]:Kousen IT, Inc. What is the name of your City or Locality? [Unknown]:Marlborough What is the name of your State or Province? [Unknown]:CT What is the two-letter country code for this unit? [Unknown]:US Is CN=Ken Kousen, OU=Unknown, O="Kousen IT, Inc.", L=Marlborough, ST=CT, C=US correct? [no]:yes
Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,000 days for: CN=Ken Kousen, OU=Unknown, O="Kousen IT, Inc.", L=Marlborough, ST=CT, C=US
Enter key password for < my_alias> (RETURN if same as keystore password):
[Storing myapp.keystore]
你可以使用jarsigner和zipalign工具去签名APK,但是使用gradle会更简单。如:
文章图片
你也许不想讲密码硬编码到build文件,你可以将它们放在gradle.properties文件中或者在命令行中设置。
在DSL文档中,signingConfigs块被委托给SigningConfig类,里面有四个常用的属性:
keyAlias:这个值在keytool签署特定的密钥时使用
keyPassword:在签名进程中使用的key的密码
storeFile:磁盘文件,包含keytool生成的keys和证书
storePassword:密钥自己使用的密码
另外有个storeType属性设置算法(默认是JKS),但是很少使用。
为了是这些配置生效,在releas下增加signingConfig属性,如下:
文章图片
【Android开发(《Gradle Recipes for Android》阅读笔记(翻译)2.6——签署发布apk)】当你运行assembleRelease任务时,会在app/build/outputs/apk目录下生成一个发行版的APK。
文章图片
有一个重要的注意事项,你必须保留密钥,否则你就不能对应用发布任何更新,因为所有版本必须要使用同一个签名。
将keystore放在一个安全的地方。这样做并不是为了加密的目的。而是为了完整性(确保APK没有被修改)和不可否认性(确保你是为一个可以对它签名的人)。如果别人得到了你的keystore,他们可以以你的名义签名别的app。
p.p1 { margin: 0; font: 11px Menlo } span.s1 { font-variant-ligatures: no-common-ligatures } p.p1 { margin: 0; font: 11px Menlo } span.s1 { font-variant-ligatures: no-common-ligatures }
推荐阅读
- Android Studio2.1版本后使用虚拟机碰见的问题总结以及其他问题
- Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载
- Android通过包名启动其他应用,若该应用已启动,则直接将应用切到前台
- Android开发——UI_片段
- 开源分享三(炫酷的Android Loading动画)
- Android studio 中,遇到报错(ERROR: x86_64 emulation currently requires hardware acceleration!CPU acceler)
- android StringBuffer 和StringBuilder
- Android获取虚拟软键盘高度
- weex开发安卓原生应用