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属性,如下:

当你运行assembleRelease任务时,会在app/build/outputs/apk目录下生成一个发行版的APK。

有一个重要的注意事项,你必须保留密钥,否则你就不能对应用发布任何更新,因为所有版本必须要使用同一个签名。
将keystore放在一个安全的地方。这样做并不是为了加密的目的。而是为了完整性(确保APK没有被修改)和不可否认性(确保你是为一个可以对它签名的人)。如果别人得到了你的keystore,他们可以以你的名义签名别的app。
Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.6——签署发布apk的更多相关文章
- Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)
如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...
- Android开发工具全面转向Android Studio(2)——AS project/module的CRUD
本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...
- 配置cordova的android开发环境(无android studio)
原文:配置cordova的android开发环境(无android studio) 趁元旦放假想试一下cordova,不想安装庞大的android studio,所以想最小化安装,居然花了一整天的时间 ...
- 收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。
AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...
- Eclipse搭建Android开发环境并运行Android项目
Eclipse搭建Android开发环境并运行Android项目 (详细) 安装环境: window 10 64位 安装工具: JDK.Eclipse.SDK.ADT 安装步骤: 1.JAVA JDK ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档
问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试
问题: 你想要测试app中的非android部分. 解决方案: 可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件. 讨论: ADT插件只支持集成测试,并 ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.3——用Eclipse ADT导出App
问题: 想在一个已经存在的Eclipse ADT的项目中使用Gradle 解决方案: Eclipse ADT插件可以帮助生成Gradle文件 讨论: Eclipse的ADT插件是在2013年推出Gra ...
- Android开发:《Gradle Recipes for Android》阅读笔记1.2
在android开发中会需要配置使用app的android SDK的最低版本和目标版本,这个是bulidl.gradle的android模块设置.默认有以下几个设置: applicationId,这个 ...
随机推荐
- Android项目总结
功能: 1.图片载入 ImageLoader 參数配置要合理 cacheMemory 一次性的图片最好不要缓存在内存中 合理控制在内存中的内存大小 ,适当的释放 volley是googl ...
- A – EIGHT
八数码转换问题-- 经典bfs-- 关键问题: 1.状态的保存(见longwuxu该题解题报告中的全排列Hash表示) 2.bfs中标记数组的处理: bfs中有两个标记数组,一个是标记队列中节 ...
- openerp wizard to tree view
从wizard跳转到tree视图最简单的方法 <act_window context="{'search_default_server_id': active_id, 'defau ...
- C语言面向对象编程(五):单链表实现(转)
这里实现的单链表,可以存储任意数据类型,支持增.删.改.查找.插入等基本操作.(本文提供的是完整代码,可能有些长.) 下面是头文件: #ifndef SLIST_H #define SLIST_H # ...
- Oracle,跳出游标循环
1,跳出游标的循环,不执行遍历了. 方法一:goto for c_row in 游标 loop if 条件 then dbms_output.put_line('测试跳出循环'); goto brea ...
- iDempiere的用户密码加密处理(AD_User.Password)(Postgresql 9.1)
怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建.http://osssme.org/ 首先对Postgresql数据库进行加密处理. 参考网页:francs写的:Postgr ...
- git 命令使用速查手册( 个人版)
1. 克隆远程库 git clone repository_address 通过 git clone 获取的git库只是远程库中的当前工作分支,如果想获取其它分支信息,可参考下面. 2. 查看远程 ...
- numpy, pandas, scikit-learn cheat sheet (速查表)
1. scikit-learn cheat sheet 官方链接如下:http://scikit-learn.org/stable/tutorial/machine_learning_map/ Oft ...
- nginx缓存设置
http://linux008.blog.51cto.com/2837805/547236 目的:缓存nginx服务器的静态文件.如css,js,htm,html,jpg,gif,png,flv,sw ...
- NPM的天坑: 解决ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE
各种下载失败,并不是镜像源的问题,哪怕切换淘宝源也无法下载.总之就像断网一般无法下载.无关网络. 解决方案: http://stackoverflow.com/questions/20747817/e ...