/ Android

Android自动化实施(1)---编写Android自动化脚本

博客主要记录人生
说一说上一周在公司搭建的Android自动化打包实施工程
实施环境
vps
内存 2g
cpu 2GHz*2
OS centos 5.1
Android sdk 21
测试主机
OS window7 RTM

1.在本机配置Android自动化编译脚本

对于未使用ant构建Android工程的project须在project的根目录执行以下命令

android update project -p .  

会在更目录生成如下两个文件

build.xml`和`local.properties  

对于使用ant构建工程可以略过此步骤,对于使用maven构建工程的可以路过这篇文章。。。

修改build.xml

project name="xxxx"`为`project   

local.properties增加app.project.name=xxx即可

添加自定义编译预处理pre_build.xml文件
主要用户批处理修改引入的R文件和AndroidManifest.xml文件
例如:

  
  
<?xml version="1.0" encoding="UTF-8"?>  
<project>  
  <macrodef name="prepackage">  
    <sequential>  
       <echo>----- change debug false ------</echo>  
	 <replaceregexp  
	   file='./src/com/xeodou/test/Log.java'  
	   flags="g"  
	   match="TEST =\s?([a-z]*)"  
	   replace="TEST = ${app.debug}">	  
	 </replaceregexp>  
	 <replaceregexp  
	    file='./src/com/xeodou/test/Log.java'  
	    flags="g"  
	    match="LOG =\s?([a-z]*)"  
	    replace="LOG = ${app.debug}">	  
	 </replaceregexp>  
	 <echo>----- modify manifest </echo>  
	 <echo>----- include package name &amp;  umeng channel ID</echo>  
	 <replaceregexp  
	    file='./AndroidManifest.xml'  
	    flags="g"  
	    match='package\s?=\s?"([\d,\w,\.]*)"'  
	    replace='package="com.com/xeodou/${app.package}"'  
	    byline='true'>  
	 </replaceregexp>  
	 <echo>----- modify .R file -----</echo>  
	 <replaceregexp  
	    encoding="utf-8"  
	    match="import com.xeodou.test.R;"  
	    replace="import com.xeodou.${app.package}.R;"  
	    flags="g">  
	    <fileset dir="./src">    
	       <include name="**/*.java"/>    
	    </fileset>   
	  </replaceregexp>  
	  <taskdef resource="net/sf/antcontrib/antlib.xml" />  
	  <if>  
	    <equals arg1="${app.icon.ldpi}" arg2="" />  
              <else>  
	        <echo>----- icon will change ------</echo>     
	        <echo>----- modify app icon  ----</echo>  
	        <copy  
	          file="${app.icon.ldpi}" tofile="./res/drawable-ldpi/ic_icon.png" overwrite="true"></copy>  
	        <copy  
	          file="${app.icon.mdpi}" tofile="./res/drawable-mdpi/ic_icon.png" overwrite="true"></copy>  
	        <copy  
	          file="${app.icon.hdpi}" tofile="./res/drawable-hdpi/ic_icon.png" overwrite="true"></copy>  
	        <copy  
                  file="${app.icon.xhdpi}" tofile="./res/drawable-xhdpi/ic_icon.png" overwrite="true"></copy>  
	    </else>  
        </if>  
      </sequential>  
  </macrodef>  
</project>  
  

以上问一个pre_build.xml样例主要使用正则去修改了包名 关闭log和切换线上代码,还可以增加其他的正则匹配,渠道名什么的也是可以的嘛。值得注意的是要是想在ant中使用if标签必须下载antcontrib这个第三方包,放入ant/lib目录在需要使用if标签的文件中引入
如下代码就可以尽情使用if else了

<taskdef resource="net/sf/antcontrib/antlib.xml" />

此时还需配置下local.properties文件。
增加

key.alias=  
key.alias.password=  
key.store=  
app.package=  
key.store.password=  
app.icon.xhdpi=  
app.icon.ldpi=  
app.icon.hdpi=  
app.icon.mdpi=  
app.debug=  

key.store 为keystore文件的目录,其他为需要在pre_build.xml中使用的常量。
加入诸如也是可以的嘛。

version.code=4  
version.name=2.3  

最后在build.xml中添加如下代码

<import file="pre_package.xml"/>  
<prepackage />  

使用终端切换到project的根目录运行

ant release  

泡杯咖啡,稍等片刻就会发现项目的根目录下的bin里躺着xxxx-release.apk文件了。

版权为本人xeodou所有。转载请注明出处。谢谢。