谷歌提供的 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~1\Java\<jdkdir>

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

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

附:

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

[Android] 基于 Linux 命令行构建 Android 应用(四):命令行构建相关推荐

  1. Android研究-linux内核启动到android系统

    很多人阅读代码,总喜欢从头开始,这样觉得很安全,有依靠,无论如何总是能知道"头",有头就能找到任何需要的部分. Android生在linux内核基础上,linux内核启动的最后一步 ...

  2. linux LTP移植Android,LTP(Linux Test Project) for Android的编译

    Linux Test Project (GitHub首页在此)(以下简称LTP) 包含了Linux内核和内核相关特性的工具集合.该工具的目的是通过把测试自动化引入到Linux内核测试,提高Linux的 ...

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

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

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

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

  5. Android获取Linux图像信息,Android系统信息获取 之十三:Linux内核版本信息获取

    Android系统信息获取 之十三:Linux内核版本信息获取 Android系统是基于Linux的,各个Android版本对应的Linux版本不尽相同,我们这里不去追究各个Android对应的Lin ...

  6. 从Tesla到Symbio Smart Auto(信必优“优驾”) – 车载系统内核之战,对阵Android的Linux同盟

    为什么是Linux Google推出Android车载替代的思考 进入大众视野的,就是在很多车载都使用Android的前提下,Google也分别推出了Android Auto和Android Auto ...

  7. 《Android Studio应用开发实战详解》——第1章,第1.4节Android和Linux的关系

    本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.4节Android和Linux的关系,作者 王翠萍,更多章节内容可以访问云栖社区"异步社 ...

  8. 浅入浅出 Android 安全:第三章 Android 本地用户空间层安全

    第三章 Android 本地用户空间层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 本地用户空间层在 Android ...

  9. Android 系统性能优化(40)---Android LowMemoryKiller原理分析

    frameworks/base/services/core/java/com/android/server/am/ProcessList.java platform/system/core/lmkd/ ...

最新文章

  1. 用Go重构C语言系统,这个抗住春晚红包的百度转发引擎承接了万亿流量
  2. Centos 安装Docker
  3. 解决查询时报的cannot be cast to com.credithc.enjoy.manager.OrderResp错误
  4. 7.16模块及软件开发目录规范
  5. html盒子模型子元素怎么水平占满父元素_立下flag)每日10道前端面试题18 关于【盒模型】十问...
  6. java 中对hashmap进行排序
  7. 2015第28周六SVN和Git
  8. 【ParaView教程】2.14 选择
  9. 电路邱关源第五版部分章节总结笔记
  10. overleaf官网登录注册报错:Sorry, we could not verify that you are not a robot.
  11. 移动安全工具-apktool
  12. OneR算法的Python简单实现
  13. 第7章第29节:四图排版:四张图片并列排版 [PowerPoint精美幻灯片实战教程]
  14. python读取Excel绘制饼图的两种方式
  15. WPF入门第三篇 ControlTemplate、Trigger与Storyboard
  16. 制作持久化的 Kali U盘
  17. Towards 3D Human Pose Estimation in the Wild: a Weakly-supervised Approach论文翻译
  18. 最新最全2011年-2020年中国统计年鉴面板数据excel
  19. 2016阿里安全峰会重点资料下载
  20. AI视频分析技术是如何工作的?原理是什么?

热门文章

  1. 网易云音乐IPO现场:丁石石石石石石石石石敲钟
  2. 这款库克寄予厚望的苹果产品,只活了2年
  3. 重置SQLSERVER表的自增列,让自增列重新计数
  4. Google因数据泄露关闭Google+消费者版本
  5. 知识点2-对二进制的运用
  6. 使用深度学习方法实现面部表情包识别
  7. Java调用net的webservice问题分享
  8. php之常用字符串方法
  9. MySQL的优化(大纲)
  10. Ruby错误:iconv will be deprecated in the future, use String#encode instead.