• 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

    ---
  • 相关阅读:
    面试技巧——经典面试问题回答思路
    Linux试题及答案(一)
    面试中的问到薪资问题怎么回答?
    LoadRunner监控Linux
    面试时如何解释被裁原因
    可持久化数组
    洛谷P2286宠物收养场·改
    改博客的背景
    洛谷P2286宠物收养场
    阶乘的0
  • 原文地址:https://www.cnblogs.com/cwgk/p/3980408.html
Copyright © 2020-2023  润新知