Android使用ant实现自动化打包和多渠道打包

前言

eclipse在Android开发过程中使用起来还是比较方便的,但是在打包时的编译速度确实不敢恭维,那么自动化打包在这时就显得很重要了,这是一个解决程序员宝贵的双手的技术。

正文

一、在开始自动化打包之前我们先要配置好环境变量(包括jdk、Android sdk以及ant的环境变量)

  • 配置JDK
    1.右击“我的电脑”弹出菜单,点击“属性“》“高级“》“环境变量“,在“系统变量”下方点击“新建”,“变量名”输入"JAVA_HOME",“变量值”输入jdk的安装目录,点击“确认”;在“系统变量”选择变量为“Path”的选项,点击下方的“编辑”,在弹出框中修改“变量值”,在原有值的末尾输入“;%JAVA_HOME%\bin”,注意开头包含一个英文的分号。
    2.点击“开始”》“运行”,输入“cmd”,在弹出的命令窗口中输入“javac -version”然后回车,如果下方出现:javac version "1.6.0_45”,说明配置成功。

  • 配置Android SDK
    1.右击“我的电脑”弹出菜单,点击“属性“》“高级“》“环境变量“,在“系统变量”下方点击“新建”,“变量名”输入"ANDROID_HOME",“变量值”输入sdk的安装目录,点击“确认”;在“系统变量”选择变量为“Path”的选项,点击下方的“编辑”,在弹出框中修改“变量值”,在原有值的末尾输入“;%ANDROID_HOME%\platform-tools”,注意开头包含一个英文的分号。
    2.点击“开始”》“运行”,输入“cmd”,在弹出的命令窗口中输入:adb回车,如果下方出现:Android Debug Bridge version ...等多行文字,说明配置成功。

  • 配置Ant
    1.右击“我的电脑”弹出菜单,点击“属性“》“高级“》“环境变量“,在“系统变量”下方点击“新建”,“变量名”输入"ANT_HOME",“变量值”输入ant的安装目录,点击“确认”;在“系统变量”选择变量为“Path”的选项,点击下方的“编辑”,在弹出框中修改“变量值”,在原有值的末尾输入“;%ANT_HOME%\bin”,注意开头包含一个英文的分号。
    2.点击“开始”》“运行”,输入“cmd”,在弹出的命令窗口中输入“ant -version”然后回车,如果下方出现:Apache Ant(TM) version 1.9.3,说明配置成功。

二、当环境变量配置完成后,我们就可以开始准备开始实现自动化打包了

1.进入要打包的工程的项目目录。
2.输入命令" android update project --name MyProject -p ./ ",其中-name参数是指定项目名称;-p参数是要打包的地址(./ 表示当前目录)。
这时候我们可以看到在我们的项目根目录下多了build.xml,以及local.properties两个文件。

  • 其中local.properties写明了我们的android SDK的目录(其实是环境变量ANDROID_HOME的值,所以如果环境变量中没有这个的,请增加)。
  • build.xml则是ant构建的最重要脚本,打开一看,发现里面其实大部分都是写注释,有用的没几行,这是因为生成的这个build.xml引用了android SDK自带的构建脚本,具体目录是{sdk目录}/tools/ant/build.xml 。

到此,我们的项目就支持ant编译打包了

三、项目中引用了其他library项目时,我们还需要让其依赖的项目支持ant编译打包

  • 进入到library项目所在的目录,输入命令 android update lib-project -p ./ (注意是 lib-project);
  • 在被依赖的library项目也支持ant打包后,我们回到主项目的工程目录下,输入之前的命令,这里要注意的时在最后需要添加一句 --subprojects,命令如下:
    android update project --name MyProject -p ./ --subprojects

四、进行项目的编译打包。

  • ant debug : 生成一个测试版apk,默认使用 debug key 进行签名,生成的apk(your_project_name-debug.apk)在bin目录下。
  • ant release : 生成一个未签名和未aligned的apk包,生成的apk(your_project_name-release-unsigned.apk和your_project_name-release-unaligned.apk)在bin目录下

五、加入签名信息
在项目的根目录下建一个ant.properties文件,输入如下内容,其中keystore密码和alias密码可以不指定(防泄漏),那么在命令执行的过程中会要求你输入。

#keystore的路径,必须使用正斜杠  
key.store= "C:\Users\Administrator\Desktop\is\android" 
#keystore的密码  
#key.store.password=123456
#alias名  
key.alias=myAlias
#alias密码  
#key.alias.password=abcdef 

在项目根目录下运行 ant release 命令就会帮你生成一个经过签名和aligned的apk,生成的apk(your_project_name-release.apk)在bin目录下

六、自动打包渠道包
1、实现批量循环打包需要一个类似于for循环的功能,在Ant的核心包里没有相关的For循环的Task,即不支持for循环,但是ant支持第三方扩展包,以支持更多的其他功能。
  于是我们要下载相应的支持for循环的扩展包。可以使用开源的Ant-contrib包。下载地址:http://ant-contrib.sourceforge.net/ ,也可以自行百度搜索资源包 。
  下载后的解压得到的jar文件放到ant的lib目录。
接下来我们就可以打包渠道包了。

  1. 首先在ant.properties文件中增加属性 market_channels (渠道列表,以逗号分割),version(应用程序版本名)
#渠道市场列表  
market_channels=yingyongbao,360,wandoujia,baidu  
#版本号  
version=8.0  

3.在我们项目的build.xml中加入如下代码:

    
  
      
          
      
  
  
          
     

  
      
          
          
          
         
          
           
      
      
       
       
       
      
  

在项目根目录下运行 ant deploy 命令就会帮你各个渠道的签名包了(为了全程可以自动执行,ant.properties文件中的keystore的密码可以指定,这样在执行过程中就不需要手动输入密码了),在bin目录的out目录下。

问题

在执行打包时我遇到了一个ant\build.xml:698: null returned: 1的错误,查了一下发现这个问题许多人都遇到了,这里记录一下:

  • 这个值主要是打包过程中忽略 res assets目录下 匹配规则的文件 默认忽略 “!.svn:!.git:.:_:!CVS:!thumbs.db:!picasa.ini:!.scc:~” 这类文件
    如果直接设置成 crunch 对其他工程会有影响。
    那么可以在自己项目的根目录下build.xml文件中加入:

这样子就只对自己的项目生效!
为什么会有\x3Cdir\x3E这个东西,其实就是

,不过ant build.xml中不允许使用'<'字符,所以要转义一下。

如果没有解决的话可以换成

二者的区别在于

的写法不同

将上面的代码复制到项目目录下的build.xml中,保存,再次打包即可。

总结

自动化打包是一门非常节省程序员开发时间的技术,自此我们宝贵的双手就解放了。233333~

你可能感兴趣的:(Android使用ant实现自动化打包和多渠道打包)