Android本身是支持ant打包项目的,并且SDK中自带一个build.xml文件。 
通过该文件,可以对文件进行编译、打包、安装等。并且支持多种方式打包,如debug或者release。 
一般的,可以按照如下方法进行操作:

首先创建一个Android工程。 
工程创建好后,需要为工程添加ant支持,即创建相应的build.xml文件。 
这个文件不需要用户自己创建,只需要执行如下命令即可: 
<sdk>/tools/android update project -p <project> -t <target>

使用:android updata project -p ./ -n OliveBoxClient -t android-10  就可以重新生成相关文件。最重要的就是build.xml

其中: 
sdk为sdk的安装目录,其下的tools/android是我们要使用的命令。 
project为项目目录。 
target为项目所使用的android的target id,也就是项目对应的android的版本。

可以将sdk的tools目录添加到环境变量 ~/.bashrc 文件中,重启后生效,以后可以直接使用命令了。 
可以通过执行以下命令查看当前sdk中所包含的target以及相应id: 
android list targets

执行完android update project命令后,会在项目的根目录下生成相应的ant文件。 
主要有build.xml、ant.properties、local.properties三个文件。 
如果没有ant.properties文件,可以自己手动添加。

其中,build.xml文件是进行ant build的主要文件,它引用了其它的文件。 
在local.properties文件中定义了sdk.dir属性,也就是当前使用的sdk的目录。 
在ant.properties文件中,可以定义自己的一些属性,或者重定义一些属性。 
当然,这两个属性文件可有可无,直接定义到build.xml中也没有关系。

在build.xml中的最后,引用了sdk目录下的tools/ant/build.xml文件。 
这个是sdk默认的build文件,可以将其内容直接拷贝过来,也可以保持当前的引用方式。 
项目下的build.xml默认执行的target是help,运行后可以看到相关的帮助信息。 
通过帮助信息,可以看到其它可用的target。 
一般的,我们需要修改为debug或者release。 
修改好之后,再运行build.xml文件,就会执行我们需要的编译过程了。 
build.xml文件的执行方法为:右键->Run As->Ant Build。

如果是debug版的话,默认会使用debug方式签名。 
如果是release版的话,需要指定相应的keystore以及私钥。 
否则,最后只能生成一个没有签名的apk文件。

设定私钥库的方法是,在ant.properties文件中,添加如下内容: 
key.store=<keystore> 
key.alias=<key> 
key.store.password=<keystore pwd> 
key.alias.password=<key pwd>

其中: 
keystore为私钥库文件。 
key为签名需要使用的私钥。 
key.store.password为私钥库的密码。 
key.alias.password为私钥的密码。

两个密码相关的属性也可以不添加,而只添加私钥库及私钥。 
这样的话,执行时会依次弹出相应的输入框,提示用户输入相应的密码。 
这样虽然相对繁琐,但是由于没有明文指定密码,对私钥库的保护会更好一些。

如果项目引用了第三方库的话,只需要在项目根目录创建libs文件夹并将其放入即可。 
如果是jar库,直接放到libs目录下;如果是so库,需要放到libs的名为armeabi的子目录下。 
也可以通过设定相应的属性来指定第三方库的位置,其默认都是libs文件夹。 
jar.libs.dir为jar类型库所在的目录。 
native.libs.absolute.dir为so类型库所在的目录,即armeabi的父目录。

如果项目包含了jni代码,希望在打包时自动重新编译so库,可以修改build.xml文件。 
修改方法为,在引用sdk的build.xml文件之前添加如下target: 
<target name="-pre-build" depends="-ndk-build"> 
</target> 
<target name="-ndk-build"> 
<exec executable="ndk-build" failonerror="true"> 
<arg value="clean" /> 
</exec> 
<exec executable="ndk-build" failonerror="true" /> 
</target>

ndk-build为ndk提供的命令,需要将ndk安装目录添加到环境变量中,添加方法同sdk/tools。 
生成的so默认会放到libs/armeabi目录下。

使用默认的build.xml打包apk时,已经包含了混淆、签名、对齐优化等相关过程。 
如果是使用release的方式,最后生成的apk文件已经可以直接发布了。

遗留问题: 
目前采用这种方法生成的APK,虽然已经被签名了,但是,安装时错误,提示未签名。 
查看APK包中的签名文件,不是默认的CERT.*,而是<key>.*。 
然后,即使将名称修改成CERT.*,程序仍然不能正常安装。 
如果导出debug版本,则不会有这个问题。 
用ADT插件导出签名APK,也不会有这个问题。

解决方法: 
产生此问题的根本原因是JDK1.7造成的,只有运行Ant使用jre1.7的版本时,才会发生该问题。 
可以通过设置运行build.xml文件时使用的jre版本来解决,具体方法是: 
选中build.xml->右键->Run As->External Tools Configurations, 
在右侧区域选中JRE标签页,可以看到对jre设定有三个选项: 
Run in the same JRE as the workspace使用与workspace相同版本的jre。 
Execution environment根据相关环境选择一个jre版本。 
Separate JRE使用一个已经安装的jre的当前版本。 
一般项目的jre都会设定为1.7以下的版本,所以建议选择第一个,使其与项目设定保持一致即可。

android的ant编译打包的更多相关文章

  1. java ant 编译打包build.xml完整配置范例

    java ant 编译打包build.xml完整配置范例 <?xml version="1.0" encoding="UTF-8" ?> <p ...

  2. 【Android】ant编译aidl的错误

    使用ant编译Android应用程序工程时,出现的错误: 错误信息(Cygwin): [aidl] This application has requested the Runtime to term ...

  3. [Android Pro] ant 编译android工程

    参考文章: http://blog.csdn.net/xyz_lmn/article/details/7268582?reload http://hubingforever.blog.163.com/ ...

  4. cocos2dx Android 使用ant 批量打包

    参考文章: 例子:http://www.2cto.com/kf/201305/208139.html http://blog.csdn.net/ljb_blog/article/details/127 ...

  5. 用ant编译打包时 警告:编码 GBK 的不可映射字符

    原因,参考http://zhidao.baidu.com/question/26901568.html 添加如下的红色一行后编译通过<target name="compile" ...

  6. Ant自动编译打包&发布 android项目

    Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...

  7. Android - Ant自动编译打包android项目 -- 1(转)

    1.  背景: Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其当要将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我 ...

  8. Andorid进阶7—— Ant自动编译打包&发布 android项目

    http://www.cnblogs.com/tt_mc/p/3891546.html Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Ecl ...

  9. Ant自己主动编译打包&amp;公布 android项目

    Eclipse用起来尽管方便,可是编译打包android项目还是比較慢,尤其将应用打包公布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自己主动编译打包了 ...

随机推荐

  1. 排序算法大汇总 Java实现

    一.插入类算法 排序算法的稳定性:两个大小相等的元素排序前后的相对位置不变.{31,32,2} 排序后{2,31,32},则称排序算法稳定 通用类: public class Common { pub ...

  2. Elastic Search的聚合搜索

    就是使用ES提供的aggs语法结果,使用DSL搜索的语法,实现聚合数据的统计,查询.ES中,如果新增document数据的时候,对应的index和type不存在,则自动创建. 1 准备源数据 PUT ...

  3. Android MediaPlayer 在 STREAM_ALARM 中播放媒体

    最近因为公司需求,要实现后台播放音频,同时广告机中的视频因为客户需求调至静音,不能通过修改系统的媒体音量来让音频发声. private MediaPlayer mediaPlayer; private ...

  4. 欧拉函数小结 hdu2588+

    从费马小定理到欧拉定理 欧拉公式 再到欧拉函数.,. 小结一下欧拉函数吧 对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)----定义 欧拉函数的基本公式其中pi为x的素因子 ...

  5. 【js】clientY pageY screenY layerY offsetY的区别

    clientY 指的是距离可视页面左上角的距离 pageY 指的是距离可视页面左上角的距离(不受页面滚动影响) screenY 指的是距离屏幕左上角的距离 layerY 指的是找到它或它父级元素中最近 ...

  6. href="javascript:show_login()"意思

    整句话意味着当你点击一个超链接时,你会触发函数show_login. Href是一个超链接,通过单击该超链接触发. javascript:后面是JS代码 show_login():表示JS的函数的油烟 ...

  7. 浅谈WEB中的高并发

    转载:https://www.cnblogs.com/guan-520/p/9575848.html 何谓高并发 高并发指的是:在同时或极短时间内,有大量的请求到达服务端,每个请求都需要服务端耗费资源 ...

  8. get获取后台数据

    let url = $.getCookie('prefixUrl')+'/currencyRatesManage/getCurrency'; let vm=this; $.ajax({ url: ur ...

  9. 第十章、time模块

    目录 第十章.模块 第十章.模块 time模块 import time 时间戳 表示:是从1970年1月1日00:00:00开始按秒计算的偏移量. time_stamp = time.time() p ...

  10. 《python解释器源码剖析》第11章--python虚拟机中的控制流

    11.0 序 在上一章中,我们剖析了python虚拟机中的一般表达式的实现.在剖析一遍表达式是我们的流程都是从上往下顺序执行的,在执行的过程中没有任何变化.但是显然这是不够的,因为怎么能没有流程控制呢 ...