史上最全:ant多渠道打包安卓工程(一)

初识ant

网上看到一些说ant构建已经不太现实的言论,想想也是,google的android studio广受欢迎,它推崇的gradle使用起来方便快捷,似乎已成主流,笔者确有体会。

回头整理工程,心血来潮,想试试ant,竟然整理了半天没弄出来,哎,真个是饭可一日不食,学不可一日而止呃。

ant是Apache基金会提供的一个打包工具,可以很方便地将软件编译、测试、部署等步骤联系在一起,自动化有序进行,也就是常说的一键打包,用起来简单省心。ant作为一个构建工具来讲,它底层依赖于Java语言,具有较好的跨平台性,所以大多数基于Java语言的工程,多选择它来实现编译部署,比如Web工程、安卓应用等。

当然,这里不得不承认,随着CoC越来越被推崇,大多数人也越喜欢使用maven来管理自己的项目。至于安卓开发,在google声明放弃了对eclipse继续提供支持之后,大多数开发者的中心也都随之迁移到google自己推出的IDE-AndroidStudio上了,老实说,google提供gradle使用起来确实很方便,而且网上的资料也远比ant要多,千好万好,有一点不得不吐槽,gradle脚本实在太恶心,像是一堆结构体,乱糟糟的,不太优雅。

无论maven也好,gradle也好,存在的即是合理的,ant也必有它存在的意义,也不是随随便便就会被完全淘汰的。退一步来讲,maven与ant并不是水火不容,它俩的比较这里给出个链接,有心的童鞋可继续探讨http://blog.csdn.net/lufeng20/article/details/7575626;而安卓开发来讲,大多数早期的安卓工程依然需要ant来完成这最后一步的签名打包,我知道的百度地图就是ant来实现的。

废话不多言,下面步入正题。

初识构建

安卓开发,发布之前,我们都知道要对生成的apk进行签名,以防被人冒充顶替。使用ADT开发,默认使用的就是用ant来实现构建,不信的话你可以打开自己的sdk路径,肯定会在tools文件夹下发现ant子文件夹,它里面会有一个build.xml文件,这个文件的重要性不言而喻,一般的,我们的应用就是在它的指挥下,一步步编译、混淆、签名,渠道发布,最终走向用户。而且这个文件极其规整,完全可用作学习ant的范本教材,绝对比你在网上查到的任何ant脚本都要简明、清晰。

不过,我们这里只是使用build.xml这个文件,并不使用ADT内部集成的ant,所以还得去ant的官网上下载安装一下,步骤跟jdk差不多,具体可参考:
http://www.cnblogs.com/yaozhongxiao/p/3523061.html

正式使用ant之前还有一点需要了解,ADT为每一个用户都提供了一个默认的密钥库,打开你的C盘,顺着这个路径找下去,正常在C:\Users\“yonghuming”.android这个文件下,会有一个debug.keystore,我们在开发的过程中,点击run时,默认的就是使用这个库里面的密钥来签名的,所以你会发现,同一个应用,如果由两台电脑生成两个apk,要安装到同一个手机上的话,必须卸载前一个(而不是覆盖)才可以。

如果我们要使用默认的debug.keystore来生成一个debug版本的apk的话,ant实现起来还是比较简单的,一般可两步走:

  • 生成build.xml和local.properties文件。

    • cmd切换到工程的根目录下(快捷方法:打开工程根目录,空白处按住shift+鼠标右键,选择在此处打开命令窗口);
    • 运行命令 android update program –name XXX – target android-19 –path “d:xx\xx\xx” ,其中第一个参数XXX 和第三个参数”d:xx\xx\xx”是必须的,分别表示你个工程名和工程路径,第二个参数显然是你的目标api。
    • 正常情况下,根目录下会自动多出两个文件。

注意:此时可能会遇到诸如“android不是内部命令”等错误,不要着急,这是你配置环境变量path时,没有将sdk的tools加进去(通常只是配置了platform-tools目录,主要用来运行adb命令),导致人家不知道你这命令是干啥的。要解决也很简单,只须依葫芦画瓢,将tools路径粘贴到path的开头或者结尾即可,然后关闭命令行窗口,再运行,嘿,是不是完美了。
这里附上一般的build.xml内容,略加注释,供大家参考。

<?xml version="1.0" encoding="UTF-8"?>
<project
    name="此处应修改成你的工程名"
    default="help" >
    <!-- 导入local.properties中定义的属性  -->
    <property file="local.properties" />
    <!-- 导入ant.properties中定义的属性    -->
    <property file="ant.properties" />
    <!--  ant的运行环境    -->
    <property environment="env" />
    <condition
        property="sdk.dir"
        value="${env.ANDROID_HOME}" >
        <isset property="env.ANDROID_HOME" />
    </condition>
    <!-- 导入project.properties中定义的属性    -->
    <loadproperties srcFile="project.properties" />
    <!-- update失败的信息提示    -->
    <fail
        message="sdk.dir is missing. Make sure to generate local.properties using &apos;android update project&apos; or to inject it through the ANDROID_HOME environment variable."
        unless="sdk.dir" />   
    <!-- 导入自定义的ant规则,此处在后文中用重要作用 -->       
    <import
        file="custom_rules.xml"
        optional="true" />     
    <!-- 导入adt自带的build.xml,里面大多数编译打包规则早就定好了,完全不用你在那里胡编乱造。可惜的是,网上大多数文章都重新来写这个build.xml,我觉得完全就是没弄明白人家的意图,东抄西凑,混乱不堪不说,而且坑了好多人跟着走弯路,实在可恶可恶 -->             
    <import file="${sdk.dir}/tools/ant/build.xml" />

</project>
  • 仍然是在工程根目录下,命令行执行ant debug命令,不出意外即可生成一个采用adt默认签名生成的debug版本的apk,保存在bin目录下。

大多数时候,我们不可能采用默认的debug.key来签名,而是会采用自己的私钥更可靠一点,那怎么办呢?

也不难,首先要有一个自己的私钥库。私钥库的创建如果你还不明白的话,那就…百度一下吧。

假设现在你已经有了一个属于自己的私钥库,而且放在了e盘的key文件夹下。

然后,你要用这个私钥来完成签名,除了使用adt的右键导出,“工程->右键->Android Tools->Export Signed Application Package…”之外,完全可以借助ant来实现:

key.store= E:/xx/xx.key
key.store.password=*****(你的store.password,创建时输入的)
key.alias=******
key.alias.password=****** (你的alias.password,创建时输入的,注意aliasalias.password不要一样,否则会有你后悔的时候...)
  • 然后就可以在cmd下执行ant release,刷新之后,正常情况下在bin目录下会生成一个经过签名和aligned的apk,名字类似(your_project_name-release.apk)。

release过程说着容易,实现起来可谓困难重重,脚本语言总会给你报出许多你想象不到的麻烦,这里举出几个,可供参考,更多的常见错误请参考下一篇文章 《ant多渠道打包安卓工程(二)》

  • 执行ant release之前,你的目录结构应该是这样的,如果不是请参照更改。

release之前,你的目录结构

  • key.store= E:/xx/xx.key。key.store文件可以放在任意目录下,但路径一定要注意,一定是linux的习惯,使用/,而不是\,否则会报“value for ‘key.store’is not valid,please use a single path.”此外路径千万不能加引号,我在这困了半天,google了无数方法,甚至听从了一个歪果仁的建议,将key.store放在了工程的根目录下来实现所谓的“single path”,然并卵。最后才发现写成了这样key.store= “E:/xx/xx.key”,简直是噩梦,歪果仁也不靠谱呃。所以这里很负责人色说一下,如果出现了“value for ‘key.store’is not valid,please use a single path.”这个错误,你就认认真真地检查一下你的ant.properties中key.store路径,绝对是这里的问题。

至于多渠道,我们留在下一篇讲,《史上最全:ant多渠道打包安卓工程(二)》

欢迎留言拍砖,转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值