谷歌提供的 Android SDK 支持 Ant 自动构建[1],你可以使用调试和发行两种模式进行构建,两种模式不同之处在于调试模式 Ant 会调用内置的调试密钥,而发行模式调用你提供的私钥。

  首先安装 Ant,并且将它添加到你的执行路径 PATH 里[2]

调试模式构建

  在调试模式下,Ant 会自动使用一个调试密钥对你的安卓应用进行签名,并且使用 zipalign 进行优化。

  要进行调试模式下的构建,首先在命令行进入安卓项目根目录,然后使用 Ant 启动调试模式构建:

$ ant debug

  该命令会在项目的 bin/ 目录下创建一个名为 <your_project_name>-debug.apk 的文件,该 .apk 文件已经使用调试密钥进行了签名,并且经过 zipalign 优化。

  每次项目中的资源发生变化,你都必须重新运行该命令进行编译和打包。

发行模式构建

  当你准备发行你的安卓应用时,就必须使用发行模式进行构建,使用该模式前,你先得有一个私有密钥,并且使用该密钥对发行包进行签名。

  你现在有两种构建方案,一是构建一个未签名的发行包然后手动签名和优化,另一个是使用脚本自动签名和优化。

构建未签名发行包

  你可以选择不签名构建,但随后你必须要进行手动签名和优化。

  要进行不签名构建,在命令行进入项目根目录,使用 Ant 在发行模式下编译你的项目:

$ ant release

  该命令会在项目的 bin/ 目录下创建一个名为 <your_project_name>-unsigned.apk 的文件。但该文件无法安装到安卓设备,直到你使用了你的私钥对其进行签名后方可。你接下来要做的事情就是对 .apk 文件签名并使用 zipalign 工具对其优化,更多参见 Signing Your Applications

构建已签名和优化包

  如果你想的话,你可以配置 Android 构建脚本来自动签名和优化你的应用包。具体做法是编辑 ant.properties 文件,在其中配置要使用的私钥 keystore 路径以及密钥别名。这样 Ant 在构建过程中会弹出对话要求输入密钥和密钥别名的密码,之后你将得到一个可以投放市场的最终发行包[3]

  具体做法为在项目根目录找到并编辑 ant.properties 文件,如果没有该文件就创建一个。在该文件添加两个字段 key.store 和 key.alias。例如:

key.store=path/to/my.keystore
key.alias=mykeystore

  保存退出,并运行 Ant 命令开始构建:

$ ant release

  中途会要求输入 keystore 和别名密码,最终你会在 bin/ 目录下得到一个名为 <your_project_name>-release.apk 的文件,该文件已经使用 ant.properties 中指定的私钥签名,并且经过 zipalign 优化,你可以随时安装与发行该文件。你可以将该文件上传至 web 服务器,然后在安卓设备中使用浏览器打开下载链接来完成自动安装。

  

注:

[1] Android SDK 提供的 android 工具能自动生成一个 build.xml 文件,Ant 会使用该文件进行自动构建。Android SDK 中没有附带 Ant 工具,你可以从 Apache Ant 主页下载安装 Ant。

[2] 在调用 Ant 之前,你还要确保你的 JDK 路径声明在了环境变量 JAVA_HOME 中。JDK 在 Windows 的默认安装路径为 "Program Files" 文件夹,由于该文件夹中含有空格符,因此会导致 ant 失败。要修复这个问题,可以将 JAVA_HOME 环境变量设置为如下:

set JAVA_HOME=c:\Progra~\Java\<jdkdir>

但最好的方法是将 JDK 安装到一个没有空格符的目录下。

[3] 由于在 Ant 构建过程中你输入的密码会显示在屏幕上,如果你对此有顾虑,可以选择使用 Jarsigner 工具进行手动签名和优化。

附:

1. Signing Your Applications - 安卓应用签名。

[Android] 基于 Linux 命令行构建 Android 应用(四):命令行构建的更多相关文章

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

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

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

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

  3. [Android] 基于 Linux 命令行构建 Android 应用(五):Ant 构建命令

    Android SDK 提供的 android 工具可以在项目根目录自动生成 Ant 构建文件 build.xml[1].进入项目根目录后,你可以使用以下 Ant 命令[2]. ant clean 清 ...

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

    关于 Android 项目 项目是保存源代码和资源文件的容器. 谷歌提供的 Android SDK 工具只能对具有固定目录结构的项目进行编译和打包.因此强烈建议使用 Eclipse + ADT 或者 ...

  5. [Android] 基于 Linux 命令行构建 Android 应用(六):Android 应用签名

    Android 要求所有应用在安装前必须使用证书进行数字签名.Android 使用该证书来确定一个应用以及其作者身份,该证书不要求由证书发行机构颁发,因此 Android 应用经常使用自我签名的证书, ...

  6. [Android] 基于 Linux 命令行构建 Android 应用(三):构建流程

    Android 应用的构建过程就是将 Android 项目中的文件和资源进行编译和打包,最后将结果输出到 .apk 文件..apk 文件是保存二进制文件的容器,它包含了运行安卓应用所需的所有信息,例如 ...

  7. Android基于mAppWidget实现手绘地图(四)--如何附加javadoc

    如何把javadoc添加到代码库中? How to attach javadoc to the library? 项目属性——>Java Build Path——>Libraries.选择 ...

  8. 八一八android与Linux的关系

    Linux与Androld的关系 虽然Android基于Linux内核,但是它与Linux之间还是有很大的差别,比如Android在Linux内核的基础上添加了自己所特有的驱动程序.下面我们就来分析一 ...

  9. Android和Linux应用综合对比分析

    原文地址:http://www.cnblogs.com/beer/p/3325242.html 免责声明: 当时写完这篇调查报告,给同事看了后,他觉得蛮喜欢,然后想把这篇文章修改一下,然后往期刊上发表 ...

随机推荐

  1. epoll惊群原因分析

    考虑如下情况(实际一般不会做,这里只是举个例子): 在主线程中创建一个socket.绑定到本地端口并监听 在主线程中创建一个epoll实例(epoll_create(2)) 将监听socket添加到e ...

  2. .net core程序中使用微软的依赖注入框架

    我之前在博文中介绍过Asp.net core下系统自带的依赖注入框架,这个依赖框架在Microsoft.Extensions.DependencyInjection中实现,本身并不是.net core ...

  3. javax.crypto.BadPaddingException: Given final block not properly padded解决方案

    解密的时候报错: javax.crypto.BadPaddingException:   Given   final   block   not   properly   padded 该异常是在解密 ...

  4. 《西部世界》S2E9:蝶化庄周,浮生若梦

    原以为第九集能解开本季大半的疑惑,结果还是被骗了……看来<西部世界>铁了心要把主要秘密都放在大结局里揭晓,大家就再等一周吧. 尽管如此,本集还是说清了不少谜团:比如威廉和格蕾丝的真实身份, ...

  5. caffe实际运行中遇到的问题

    https://blog.csdn.net/u010417185/article/details/52649178 1.均值计算是否需要统一图像的尺寸? 在图像计算均值时,应该先统一图像的尺寸,否则会 ...

  6. 解决Nginx的13: Permission denied) while connecting to upstream

    一.问题 做Nginx负载的时候,经常遇到这样的情况: // :: [crit] #: * connect() to failed (: Permission denied) while connec ...

  7. python 网络工具 scapy 介绍

    作者介绍,这是个万能的网络工具,除了可以查看 TCP/IP 各层的报文,还可以发送报文.可以说是一个万能工具,作者嚣张的说, “it can replace hping, 85% of nmap, a ...

  8. Emacs flycheck插件配置中遇到的若干问题

    工欲善其事必先利其器,一个高效的代码检查工具会大大提高我们的开发效率.flycheck是Emacs中常用的一个代码编译检查工具,本文记录配置它的时候遇到的一些问题以及解决方法. flycheck的基本 ...

  9. ftrace 示例

    假设debugfs已经挂载到了/sys/kernel/debug目录下,下面的小脚本用来抓取unlink系统调用的耗时: cd /sys/kernel/debug/tracing echo funct ...

  10. loadrunner上传文件到网盘

    有人提问,loadrunner 上传文件搞不好,请求帮忙处理.让提供网址,用fiddler抓包上传部分,主要有3个请求 第一个请求GET https://yun.xxx.com/api/files/u ...