发布应用

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的更多相关文章

  1. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  2. 配置android sdk 环境

    1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/

  3. Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记

    以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...

  4. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  5. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  8. Android Studio 多个编译环境配置 多渠道打包 APK输出配置

    看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...

  9. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

随机推荐

  1. React开发调试工具--react-developer-tools

    1. 首先,下载react-developer-tools开发调试工具插件. 因为谷歌插件下载需要FQ,这里提供一个本地资源:https://www.crx4chrome.com/crx/3068/ ...

  2. 2017面向对象程序设计(Java) 第4周学习指导及要求(2017.9.14-2017.9.18)

    学习目标 深入理解程序设计中算法与程序的关系: 深入理解java程序设计中类与对象的关系: 理解OO程序设计的第一个特征:封装: 需要掌握基本使用方法的预定义类有:Math类.String类.Arra ...

  3. azkaban编译以及安装(调度系统)

    编译源码 下载azkaban源码 git clone https://github.com/azkaban/azkaban.git   jdk要求是1.8以上版本 export JAVA_HOME=/ ...

  4. Java中字节流和字符流复制文件

    字节流和字符流复制文件的过程: 1.建立两个流对象 绑定数据源和目的地 2.遍历出需复制的文件写入复制过后的新文件中(只不过是遍历的时候是区分字节和字符的) 3.访问结束后关闭资源 字节流复制文件: ...

  5. BOM 对象--location、navigator、screen、history

    1.location 对象 location提供了与当前窗口中加载的文档有关的信息,还有一些导航功能.需要注意的是,window.location 和 document.location 引用的是同一 ...

  6. linux重新安装python

    第一步:下载python2.7  wget https://www.Python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz 第二步: 解压刚刚下载的压缩包 ...

  7. 【Scheme】cons的过程性实现

    (define (cons x y) (define (dispatch m) (cond ((= m 0) x) ((= m 1) y))) dispatch) (define (car z) (z ...

  8. Python+Selenium学习--简单对象定位

    场景 测试对象的定位和操作是webdriver的核心内容,其中操作又是建立在定位的基础之上,因此对象定位就越发显得重要了. 定位对象的目的一般有下面几种 操作对象 获得对象的属性,如获得测试对象的cl ...

  9. ora-12899解决方法

    在使用ORACLE的过程中,会出现各种各样的问题,各种各样的错误,其中ORA-12899就是前段时间我在将数据导入到我本地机器上的时候一直出现的问题.不过还好已经解决了这个问题,现在分享一下,解决方案 ...

  10. Framework7框架结构

    以2017年2月10日发布的Framework7 1.5.3为例. (function(){ 'use strict'; window.Framework7 = function(){ var app ...