文档章节

ANT打包

消失了雨痕
 消失了雨痕
发布于 2015/03/26 09:56
字数 1562
阅读 63
收藏 0

配置ANDROID_HOME环境变量

很简单的ant打包我们只需要利用eclipse自带的ant插件即可实现,首先配置ANDROID_HOME,右键 计算机->属性->高级->环境变量,如下图,在“系统变量”下新建一个变量,变量名为ANDROID_HOME,变量值为android_sdk的存放目录


然后,在系统变量中的Path变量里最前面添加“%ANDROID_HOME%/tools;”;如下图(注意有个后面有个分号)


好了,确定配置完毕,这样完了之后我们就可以在cmd窗口中执行android命令了,如果显示android不是系统命令,那么检查自己在配置ANDROID_HOME过程中出了什么问题吧,其实咱们执行的android命令就是tools目录下的android.bat,所以才在Path中添加tools的路径。

ant打包

前面我们已经配置好ANDROID_HOME了,下面我们进入cmd,并进入需要ant打包的工程根目录,执行命令“android update project -p ./”,参数p表示路径,用./表示当前路径,执行结果如下图:


然后我们在eclipse中刷新项目,可以看到多了以下两个文件

building.xml和local.properties


我们先不要看里面是什么,现在我们已经可以使用ant进行打包了,在build.xml文件上右键->运行方式,由于是第一次执行ant构建,我们选择第二个“ant 构建”配置执行的选项target


这里我选的release,这些target都是sdk自带的ant写好的,在“xxx\android-sdk\tools\ant\build.xml”中有定义


执行顺序可以自己调整,“help”可以在目标中把勾去掉。点击运行,开始打包。如果最后打包成功了,恭喜你,你的软件版本没有问题,可以跳过下面的问题。我在使用ant的时候遇到下面两个问题导致最后打包失败。

注意:ant 构建前先clean一下!

问题1


构建失败
D:\Program Files\Android\android-sdk\tools\ant\build.xml:397: The Android Ant-based build system requires Ant 1.8.0 or later. Current version is 1.7.1


这个很容易解决,下载ant1.8以上就可以了,遇到这个问题的小伙伴们可以点击这里下载提取码:66b4。我上传的ant压缩包。csdn资源上传审核真特么恶心,我只能放在360云盘了。

下完之后解压即可,这里我解压到E盘,"E:\Ant",然后在eclipse中配置ant目录,窗口->首选项->Ant,选择“运行时”

如下图点击Ant主目录选择"E:\Ant"


确定后再按照前面讲的执行“ant 构建”,如果成功打包,说明没有其他问题了。

问题2

[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
          [dx] java.nio.BufferOverflowException
          [dx] at java.nio.Buffer.nextPutIndex(Buffer.java:501)
          [dx] at java.nio.HeapByteBuffer.putShort(HeapByteBuffer.java:296)
          [dx] at com.android.dex.Dex$Section.writeShort(Dex.java:818)
          [dx] at com.android.dex.Dex$Section.writeTypeList(Dex.java:870)
          [dx] at com.android.dx.merge.DexMerger$3.write(DexMerger.java:437)
          [dx] at com.android.dx.merge.DexMerger$3.write(DexMerger.java:423)
          [dx] at com.android.dx.merge.DexMerger$IdMerger.mergeUnsorted(DexMerger.java:317)
          [dx] at com.android.dx.merge.DexMerger.mergeTypeLists(DexMerger.java:423)
          [dx] at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:163)
          [dx] at com.android.dx.merge.DexMerger.merge(DexMerger.java:187)
          [dx] at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
          [dx] at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
          [dx] at com.android.dx.command.dexer.Main.run(Main.java:230)
          [dx] at com.android.dx.command.dexer.Main.main(Main.java:199)
          [dx] at com.android.dx.command.Main.main(Main.java:103)

这个问题是由于sdk的build-tools版本导致的,我在19.x版本上都遇到这个问题,更新到20或者删掉19改用18问题解决。如果sdk Manager更新不了可以到网上直接下载最新的sdt把build-tools目录拷贝到当前sdk的build-tools中即可,如果安装了低版本的可以直接把19版本删掉。

以上就是我遇到的两个问题和解决方法。

如果打包成功,刷新bin目录会发现有未签名的apk:“xxx-release-unsigned.apk”,下面我们要为ant配置签名文件和混淆文件。

加入混淆和签名

数字签名大家都知道怎么一回事儿了,混淆代码就是将编译好的.class中的类名映射成一些看不出确切意义的字母,防止被反编译。我们在ant的配置文件中添加参数名和参数值。那我们就要看自动生成的build.xml里写的是什么东西了。

build.xml:

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <?xml version="1.0" encoding="UTF-8"?>  

  2. <project  

  3.     name="MainActivity"  

  4.     default="help" >  

  5.   

  6.     <property file="local.properties" />  

  7.   

  8.     <property file="ant.properties" />  

  9.   

  10.     <property environment="env" />  

  11.   

  12.     <condition  

  13.         property="sdk.dir"  

  14.         value="${env.ANDROID_HOME}" >  

  15.   

  16.         <isset property="env.ANDROID_HOME" />  

  17.     </condition>  

  18.   

  19.     <loadproperties srcFile="project.properties" />  

  20.   

  21.     <fail  

  22.         message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."  

  23.         unless="sdk.dir" />  

  24.   

  25.     <import  

  26.         file="custom_rules.xml"  

  27.         optional="true" />  

  28.   

  29.     <import file="${sdk.dir}/tools/ant/build.xml" />  

  30.   

  31. </project>  


build.xml里面就这么短的代码,其实,核心部分就是最后的“<import file="${sdk.dir}/tools/ant/build.xml" />”我们执行的release就是在/tools/ant/build.xml中定义的,那我们自己的东西要写在哪里呢?看这两句“<property file="local.properties" />”和“<property file="ant.properties" />”,local.properties已经给我们生成了,ant.properties没有生成,如果你需要也可以新建一个,那么我们的配置就写在local.properties中。如果不知道怎么创建数字签名文件,我就再啰嗦一会儿,手动导出apk的时候提示选择一个keystore,这时候可以选择Create new keystore,存放目录放在当前工程根目录下,填完后先导出一个apk,之后就可以看到工程下有个.keystore文件了。接下来我们就可以配置ant打包选项了。下面来看local.properties的内容:

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. #下面这句是自动生成的  

  2. sdk.dir=D:\\Program Files\\Android\\android-sdk  

  3. #数字签名文件  

  4. key.store=jingchen.keystore  

  5. #别名alias  

  6. key.alias=jingchen  

  7. #数字签名的密码  

  8. key.store.password=111111  

  9. #alias的密码  

  10. key.alias.password=111111  

  11. #这里设置混淆代码,在当前项目的proguard-project.txt中编写混淆规则  

  12. proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt  


上面注释都写着。好了,到这里我们的ant带签名和代码混淆的自动打包搞定了!

注意:ant 构建前先clean一下!这个也可以写到配置文件里,下一篇文章会讲到。在下一篇文章中,我将会讲到如何批量多渠道打包!

我的问题:

注意,如果我们项目中有依赖其他项目,那么我们也需要把那些项目创建ant环境,比如说android应用一般会依赖android-support-v7-appcompat,这时我们需要cd到此项目运行第二步的命令,看到有build.xml就可以了。否则可能会看到如下错误:BUILD FAILED F:\android\adt-bundle-windows-x86-20140321\sdk\tools\ant\build.xml:471: Invalid



本文转载自:http://blog.csdn.net/zhongkejingwang/article/details/37914219

共有 人打赏支持
消失了雨痕
粉丝 7
博文 19
码字总数 1487
作品 0
杭州
高级程序员
Android ANT多渠道打包

在没用AndroidStudio的Gradle构建项目之前,多渠道打包一般都是基于ANT构建,所以在此记录一下,以供查阅! 一、文件准备 1、首先要去官网下载ANT代码。 ANT官网下载地址 2、下载ANT循环打包...

军歌
2014/11/20
0
3
使用Ant 实现批量打包Android应用

由于公司运维需要以及应用中需要加上应用推广的统计,往往要对应二三十个渠道,按照正常方法一个一个的去生成不同渠道包的应用,不仅浪费了时间,而且大大降低了效率. 上一篇讲到使用Ant进行...

Easince
2012/11/27
0
0
部署公司打包工具需要注意的一些问题

公司利用ant提供了一个打包环境,大概的功能是通过ant直接checkout cvs服务器上面的代码,编译后生成能够直接部署在weblogic服务器上的ear包。 虽然有部署文档,坑却还是有。ant是必须安装的...

彭苏云
2014/04/02
0
0
Ant编译android,并Proguard代码混淆,v4混淆配置

忙了三四周,总算把购开心的ios版(appStore搜“购开心”)成功翻译成了android版,UI效果基本保持一致,上一张UI效果图吧,很养眼的: 还不错吧,进入正题吧。 以前一直是让我徒弟混淆和打包的...

辉兔狼
2013/09/03
0
1
XMPP学习笔记-LESSON-004:openfire之编译简介

of的使用非常简单,便捷,由于开源,下载源码后也可以随意修改,于是编译也就有了了解的必要。 of的构建工具是ant,所以前提你需要下载apache ant,并配置好环境。在此之前,建议了解一下ant...

今幕明
2014/02/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL面试题集锦

什么是数据库索引?索引有哪几种类型?什么是最左前缀原则?索引算法有哪些?有什么区别? 索引是对数据库表中一列或多列的值进行排序的一种结构。一个非常恰当的比喻就是书的目录页与书的正...

老道士
22分钟前
0
0
使用 LogStash 归集日志

elastic 官网: https://www.elastic.co/ 为了便于集中查看多台主机的业务日志,使用 Filebeat, Redis, Logstash的方式进行收集: (1) Filebeat 监控日志文件的变化, 将新增部分写入redis中, 每...

ouhoo
25分钟前
0
0
java序列化(六) - protostuff序列化

添加依赖 <dependency> <groupId>io.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.5.9</version> </de......

晨猫
31分钟前
0
0
Ceph学习笔记1-Mimic版本多节点部署

特别说明: 本方法也可以用于单节点部署,只部署一个Monitor(只是会形成单点故障而已),最低要求是使用两个分区创建2个OSD(因为默认最小副本是2);如果不需要使用CephFS,则可以不部署M...

LastRitter
34分钟前
0
0
923. 3Sum With Multiplicity - LeetCode

Question 923. 3Sum With Multiplicity Solution 题目大意: 给一个int数组A和一个目标值target,求满足下面两个条件的组合个数,其中i,j,k分别为数组的索引 i<j<k target = A[i] + A[j] + A[k...

yysue
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部