在开发android程序的过程中,我们使用ant debugant installd这两个命令就够了,不涉及到APK的签名。

但是在正式发布我们的Android程序时,需要对APK签名。ant release生成一个release版程序。

ant release在package这一步会生成一个未签名的apk:xxx-release-unsigned.apk。然后试图用ant.properties里面给出的keystore文件对这个apk签名,生成xxx-release.apk。如果ant.properties没有给出keystore,不会生成签名的apk。这时你运行ant installr就会失败,因为ant找不到xxx-release.apk

解决方法有两种:(1)在ant.properties文件中设置key.store和key.alias,然后重新运行ant releaseant installr命令。(2)自己用命令对xxx-release-unsigned.apk签名和zipalign,生成xxx-release.apk,然后再运行ant installr

不管用哪种方法,我们都要先准备好keystore文件。JDK提供了keytool程序,可以生成key.store文件。

keytool.exe -genkey -alias jollywing.android.keystore -keyalg RSA -validity 36500 -keystore android.keystore
  • -genkey 表示要进行的动作是生成keystore.
  • -alias 是这个keystore的别名。
  • -keyalg 表示生成密钥对的算法。
  • -validity 表示有效期,这里36500接近100年。
  • -keystore 指定最终生成的keystore文件名。

运行命令,会提示输入密钥库口令。这个口令在给apk签名时还会问到。

然后会询问一些信息,你的姓名、你的组织、你所在的地区等。

最后还会询问key.alias的密钥口令,直接回车,表示使用和密钥库相同的口令。

命令运行成功,还会得到一个警告信息:

JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore android.keystore -destkeystore android.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

我们可以运行警告信息中的命令,把密钥库转换成标准格式。这一步可选。

然后我们可以签名了。两种方式,一种是用ant release命令签名,另一种是手动签名。

如果用ant release命令签名,我们把android.keystore放在工程根目录下,即和build.xml和ant.properties相同的目录。然后编辑ant.properties,增加以下内容。

key.store=android.keystore
key.alias=jollywing.android.keystore
key.store.password=<刚才设置的密钥库口令>
key.alias.password=<刚才设置的密钥库别名口令>

如果android.keysotre没放在工程根目录下,最好使用绝对路径指明keystore文件放在哪里。

然后ant releaseant installr就OK了。

最后再讲一下自己用命令对xxx-release-unsigned.apk进行签名。

使用jdk中的jarsigner命令(apk就是一个jar包文件)。

jarsigner -keystore <keystore文件的路径> <xxx-release-unsigned.apk的路径> 密钥库别名

命令运行后,xxx-release-unsigned.apk就是已经签名的了。

zipalign -v 4 <xxx-release-unsigned.apk的路径> <要生成的xxx-release.apk的路径>

zipalign命令放在android sdk的build-tools目录下。

好了,一个可以发布的apk新鲜出炉了,adb install <xxx-release.apk的路径>试试看吧。如果xxx-release.apk放在工程的bin目录下,也可以直接运行ant installr

2017-11-25 周六

用命令行发布android程序的更多相关文章

  1. unity3d发布Android程序

    unity3d是一个跨平台的游戏开发引擎,可以使用c#开发各种平台上的游戏,如windows,Mac,Android,windows phone,IOS,Flash等.下面说下如何将开发好的unity ...

  2. 命令行创建Android应用,生成签名,对APK包签名并编译运行

    一.命令行创建Android应用 android create project -n HelloWorld -t android-22 -p HelloWorld1 -k org.crazyit.he ...

  3. [Android] 基于 Linux 命令行构建 Android 应用(七):自动化构建

    本章将演示如何基于 Linux 命令行构建 Android 应用,在开始本章之前,希望你已经阅读之前几章内容. 本文环境为 RHEL Sandiego 32-bits,要基于 Linux CLI 构建 ...

  4. [Android] 基于 Linux 命令行构建 Android 应用(二):命令行管理项目

    创建 Android 项目 在命令行创建 Android 项目需要用到 android 工具(该工具由 Android SDK 提供,位于 <sdk>/tools/ 目录下.).它能自动生 ...

  5. 命令行创建Android应用,命令行生成签名文件,命令行查看签名信息,对APK包签名并编译运行

    一.命令行创建Android应用 android create project -n HelloWorld -t android-22 -p HelloWorld1 -k org.crazyit.he ...

  6. 一个使用命令行编译Android项目的工具类

    一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...

  7. win10 uwp 使用 msbuild 命令行编译 UWP 程序

    原文:win10 uwp 使用 msbuild 命令行编译 UWP 程序 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http:// ...

  8. 使用命令行编译Qt程序

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  9. windos命令行下的程序编写

    1.命令行下写程序. 写程序一定要用IDE?不,我还可以用记事本呢.呵呵,写程序一定要用记事本?? ———————————————— 命令行下输入copy con test.txt后回车可在相应目录下 ...

随机推荐

  1. 应用层协议及ip地址划分

    1.应用层协议 2.ip地址 3.子网划分及超网合并

  2. MidoNet 安装(Kilo RDO)(最老版)

    一.初始化(Kilo RDO)版(最老版) 环境介绍 系统 CentOS 7.3 主机ip 10.211.55.5 主机名 midonet 1.配置yum源 ###OpenStack源 yum ins ...

  3. async中await是干啥的,用不用有什么区别?

    最近在研究异步编程,用的async await task啥的,但是都这几个概念很模糊,还有不太清楚await是干啥的,task又是干啥的,用不用await有什么区别,他们三个之间的联系是什么? tas ...

  4. 关于super的理解,三篇文章支撑起来的

    1.有向图的拓扑排序https://blog.csdn.net/wp1603710463/article/details/50900892 2. Python中MRO算法 http://mp.weix ...

  5. poj1068 【模拟】

    Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways:  ...

  6. Android8.0运行时权限策略变化和适配方案

    版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.comAndroid8.0也就是Android O即将要发布了,有很多新特性,目前我们可以通过AndroidS ...

  7. 如何安装/卸载workflow manager 1.0

    安装 1. 配置文件: <Workflow> <!--http://msdn.microsoft.com/en-us/library/windowsazure/jj193269(v= ...

  8. suoi21 高能显示屏 (cdq分治)

    可以把翻倍的操作看作是一个查询和修改(增加刚查询得来的值)的符合操作,然后做cdq就行了 #include<bits/stdc++.h> #define pa pair<int,in ...

  9. bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)

    平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权. 然后从刚才加的s->t分割出来的两面对应的两个点跑最 ...

  10. Mysql插入、替换和无视

    在现实的生产环境下,通常我们都会遇到这样的应用场景,需要我们更新数据.替换数据,若存在则不操作. insert into表示插入数据,数据库会检查主键,如果出现重复会报错: replace into表 ...