(转载请注明出处: http://blog.csdn.net/xieyan0811)
使用Ant编译Android应用程序很方便,在Window和Linux下均可使用。尤其是将一个软件打成稍有差异的多个包时,非常实用。最近积累了一些小经验,下面分享一下:
1. 如何在Linux/Window上安装Ant|
1) 在Linux下直接用ant安装即可)
sudo apt-get install ant
2) 在Windows下安装设置步骤如下(在XP及Win7可正常使用)
a) 下载ant最新版本的二进制包
http://ant.apache.org/bindownload.cgi
此包为压缩包,解包即可直接使用。
b) 设置环境变量
i. 我的电脑->右键->属性->高级->环境变量(Win7类似)
ii. 在系统变量中加入ANT_HOME,设置为ant解压的目录,形如:
C:\Program Files\apache-ant-1.9.4
iii. 在系统变量Path中加入Ant可执行程序路径,形如:
C:\Program Files\apache-ant-1.9.4\bin
2. 如何为已存在的开发包建立ant编译环境
(除Ant还需要安装JDK和Android SDK,请参考http://wenku.baidu.com/link?url=NN8HYiTx7113MVK2KDDOHT3gRPLbLcFRCIg28UOrhnsI6_litOGKbuU5oAH1ubpMrS6JRtJacpjgl4sQD002lG2v8OE3RAw-zgIq1tokHCK)
1) 在Linux下执行(android程序在AndroidSDK的tools目录下)
android update project --name app_name -t 1 -p /home/xieyan/appsrcdir
2) 在Windows下执行(android.bat程序在AndroidSDK的tools目录下)
android.bat update project --name app_name -t 1 -p c:\xieyan\appsrcdir
3. 如何自动签名生成Release包
1) 在源码目录下,建立ant.properties文件,将签名信息写入其中,形如:
key.store=xxx/yyy.keystore
key.alias=zzz.keystore
key.store.password=123456
key.alias.password=123456
2) 再运行antrelease,即可在bin目录下生成签名后的apk文件
4. 如何设置和使用Ant中的变量
1) 在ant.properties中可以设置Ant中使用的变量,其格式为name=value
2) 也可以生成其它properties文件,在build.xml中使用以下命令包含该配置文件:
<property file=”文件路径”/>
5. 如何扩展build.xml文件以添加更多方法,如何调用方法
1) 在源码目录下建立custom_rules.xml,将自定义方法放在其中即可使用;也可以将自定义方法加入build.xml中,但由于更换编译环境,有时需要重新生成build.xml,新加入的方法就被覆盖了。
2) custom_rules.xml同build.xml格式相同,形如:
<project name="custom_rules">
<target name="testme">
<echo message="testtest!" />
</target>
</project>
3) 此时使用ant testme,即可执行该方法,看到test test!的显示信息
4) 在一个方法中调用另一个或多个方法,使用depends,形如:
<target name="testme" depends=”fun1,fun2”>
6. 如何在Ant中复制文件
1) 先用delete删除原文件,再使用copy复制,形如:
<delete file="res/drawable-hdpi/logo.png"/>
<copy file="xxx/logo.png"
tofile="res/drawable-hdpi/logo.png"/>
7. 如何在Ant中执行二进制程序
1) 使用exec执行二进制程序,每个参数放在一个arg中,形如:
<replaceregexp file="src/com/xxx/yyy/zzz.java"
match='(.*)public static final StringXXX=(.*)'
replace=' public static final String XXX = "${YYY}";'
byline="true"/>
8. 如何在源码中替换字符串
1) 使用replaceregexp替换字符串,可使用通配符
<replaceregexp file="src/com/xxx/yyy/zzz.java"
match='(.*)public static final StringXXX=(.*)'
replace=' public static final String XXX = "${YYY}";'
byline="true"/>
9. 如何修改字体串及Window/Linux下中文乱码问题的解决
1) 一般字符串定义在strings.xml中,它是一个xml文件,而replaceregexp中不能直接处理尖括号,需要使用转符;另外需要注意含有中文的文件,需要将编译指定为utf-8,形如:
<replaceregexp encoding="utf-8"file="res/values/strings.xml"
match='(.*)string name="app_name"(.*)'
replace=' <string name="app_name">${APP_NAME}</string>'
byline="true"/>
2) 上例中的APP_NAME是ant中定义的一个变量,中文可能产生乱码,如果直接写在build.xml或custom_rules.xml中,可用直接使用utf8字符,如果放在properties变量文件中,需要使用native2ascii进入编码转换。native2ascii是java工具,用于将本地字符转为ascii字符,因此其源数据文件(native)在不同系统中也需要使用不同编译,例如在linux下默认源编码为utf-8,在Windows下为gbk,如果想多平台通用,需要在使用native2ascii命令时加入--encoding参数,形如:
<target name="native2ascii">
<delete file="${ascii_props}"/>
<execexecutable="native2ascii">
<argvalue="${native_props}"/>
<argvalue="${ascii_props}"/>
<argvalue="-encoding"/>
<argvalue="GBK"/>
</exec>
</target>
10. 如何修改包名(形如:com.xxx.yyy)
1) 修改包名,需要修改AndroidManifest.xml以及源码中各个java文件和xml文件,还需要先从AndroidManifest.xml中取到当前包名,以进行替换,形如:
<target name="set-pkg">
<xmlpropertyfile="AndroidManifest.xml" collapseAttributes="true" />
<propertyname="old_package_name" value="${manifest.package}"/>
<property name="new_package_name"value="com.xxx.yyy"/>
<deletedir="${build.bin}" />
<deletedir="${build.gen}" />
<replaceregexpfile="AndroidManifest.xml"
match='package="(.*)"'
replace='package="${new_package_name}"'
byline="false"/>
<replaceregexpmatch="${old_package_name}"
replace="${new_package_name}"
byline="true">
<filesetdir="${src}" includes="**/*.java" />
</replaceregexp>
<replaceregexpmatch="${old_package_name}"
replace="${new_package_name}"
byline="true">
<filesetdir="${res}" includes="**/*.xml" />
</replaceregexp>
</target>