Android.PublishApplication
发布应用
3. 为App签名
Android 要求App在安装前,需要使用证书(certificate)来进行数字签名(be digitally signed).
Android 用证书来标识一个App的作者或者开发商。该证书不需要由证书管理机构(certificate authority)来签发。
Android app 经常使用自签发的证书(self-signed certificate)。App开发者来保存证书的私钥。
3.1 在debug模式下签名
不能发布一个在debug模式下签名的app。Android Studio 和 ADT plugin for Eclipse在debug模式下
自动为你的app进行签名。
3.2 在release模式下签名
在release模式下,用自己的证书为自己的app签名,步骤:
1 创建keystore。keystore是一个包含了一组私钥的二进制文件。keystore必须保存
在安全可靠的地方。
2 创建私钥。私钥代表随app被标识的实体,实体可以是人或者公司。
3 构建project。为app生成一个未签名的apk。
4 签名app。用你的私钥来生成apk的签名版本。
在完成这个过程后,可以发布你的app。
keystore和private key需要放在安全可靠的地方,并且有可靠的备份。
如果发布app到Google Play,然后丢失了用来签名app的private key,那么就无法对该app进行更新。
因此必须用同一个key来对所有的版本进行签名。
3.3 在Android Studio中进行签名 (略)
3.4 在ADT中进行签名 (略)
3.5 签名的考虑因素
3.6 保证私钥的安全
3.7 debug证书的过期
3.8 手动对app进行签名
可以使用Android SDK 和 JDK的工具在命令行为app进行签名。
1.用keytool创建私钥
$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
10000天有效期,生成一个keystore:my-release-key.keystore。 该keystore包含一个key,alias_name是key的名字。
2.在release模式下编译app来获得一个未签名的apk。
3.用jarsigner和私钥来对app进行签名:
$ jarsigner -verbose -sigalg SHAwithRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
可以用不同的key来对apk进行多次签名。
4. 确认apk已被签名:
$ jarsigner -verify -verbose -certs my_application.apk
5. 用zipalign对齐apk包
$ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
4. 使用ant自动化Android App的构建过程
4.1 创建构建文件build.xml
ant 类似make工具,build.xml 类似makefile文件
使用android工具来创建build.xml文件。
4.2 创建ant.properites文件
注:在自动化构建中使用jarsigner
在用ant构建工具来构建app时,可以通过ant.properties来为jarsigner提供参数,例如
key.store.password=storepass
key.alias.password=aliaspass
key.store=path/to/keystore
key.alias=alias_name
4.3
jarsigner -verify xxx.apk
笔者的jdk版本是: java version "1.6.0_65"。由于在Mac OS X运行上面的命令,jarsigner是乱码,bad grammar
请同事在同事机器上运行上面的命令,有以下输出:
"jar 已验证。
警告:
此 jar 包含证书链未验证的条目。
有关详细信息, 请使用 -verbose 和 -certs 选项重新运行。"
该问题原因参见Ref[3]。
Reference:
1. jarsigner
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jarsigner.html
2. 在ant中提供password来直接自动化构建
http://stackoverflow.com/questions/9932498/signing-applications-automatically-with-password-in-ant
3. 此 jar 包含证书链未验证的条目
http://stackoverflow.com/questions/8387983/jarsigner-this-jar-contains-entries-whose-certificate-chain-is-not-validated
Android.PublishApplication的更多相关文章
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 配置android sdk 环境
1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/
- Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记
以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...
- Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记
以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- Android Studio 多个编译环境配置 多渠道打包 APK输出配置
看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
随机推荐
- 吴裕雄 python oracle检索数据(1)
import cx_Oracle conn = cx_Oracle.connect("scott/admin@localhost:1521/ORCL")cursor = conn. ...
- hdu1576-A/B-(同余定理+乘法逆元+费马小定理+快速幂)
A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Java8 Optional的简单操作
我们经常会遇到这种情况:首先判断一个对象是否为null,如果不为null,获取一个对象中的一个属性,如果该属性不为null,又获取该属性的属性,如果该属性的属性不为null,又获取属性的属性的属性: ...
- tomcat修改上下文path
server.xml <Host name="localhost" appBase="webapps" unpackWARs="true&quo ...
- 生成Release apk
[生成Release apk] 1.使用Java SDK中的keytool生成keystore. Java SDK一般位于:C:\Program Files\Java\jdkx.x.x_x\bin. ...
- Flex Basis与Width的区别
[Flex Basis与Width的区别] Flex Items的应用准则 content –> width –> flex-basis (limted by max|min-width) ...
- day22 面向对象基础
1.什么是面向过程 在介绍面向对象之前,要先明确面向过程 在这之前我们所写的任何代码都是面向过程的 什么是面向过程? 是一种编程思想 面对 朝向 在编写代码时,要时刻想着过程这两个字 过程指的是什么? ...
- rancher 2 安装 longhorn
宿主机为centos 7 注意一定要安装open-iscsi yum install iscsi-initiator-utils 集群--默认命名空间--目录应用--longhorn 安装
- 从尾到头打印链表(python)
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, ...
- ubuntu 印象笔记
1. 印象笔记剪裁,直接浏览器上百度搜索,下载浏览器插件,登陆即可.(不过,我遇到个问题,浏览器登陆的服务器貌似是国际版的,与pc上的服务器不同,也没有成功转换过来.两账户相互独立.) 2. 印象笔记 ...