使用Ant编译Android

(转载请注明出处: 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>



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xieyan0811/article/details/39079201
文章标签: ant android
个人分类: android
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭