使用Ant自动化编译Apk包

ant安装包地址:
http://download.csdn.net/detail/baopengjian/9662071
一、生成build.xml文件
SDK在tools/ant目录下自带这三个文件
使用Ant自动化编译Apk包_第1张图片
其中build.xml和uibuid.xml中定义了大量基础构建方法和打包策略。我们只需要把项目中的build.xml存放在项目的根目录下,然后引用一下sdk目录下的tools/ant/build.xml即可,也可以拷贝它直接进行操作。
(1)项目生成build.xml文件需要依赖于sdk的tools/android.bat命令,将android.bat的路径添加到环境变量中去。
(2)进入项目的根目录,按住shift+鼠标右键,打开命令行窗口
使用Ant自动化编译Apk包_第2张图片
(3)进入项目的根目录对应的cmd窗口, 执行如下命令android update project -p . -t 目标版本
如:android update project -p . -t android-20,就会生成3个文件build.xml,local.properties,proguard-project.txt.
注意:由于sdk可能不是最新的版本,build.xml文件需要更新,或者直接拿新的build.xml覆盖(f002. 安卓sdk中的build.xml)

二、 配置ant.properties 
ant.properties文件是不会自动生成的,需在项目根目录下新建一个ant.properties文件。
 然后根据构建的实际需要进行相关配置。在ant.properties文件中,可以定义自己的一些属性,或者重定义一些属性。
1、设定私钥库
  ant构建时,如果是debug版的话,默认会使用debug方式签名。
  如果是release版的话,需指定相应的keystore以及私钥。否则,最后只能生成一个没有签名的apk文件。
  设定私钥库的方法如下:
 
  在ant.properties文件中,添加如下内容:
     key.store=
    key.alias=
    key.store.password=
    key.alias.password=
    其中:
      keystore为私钥库文件。
      key为签名需要使用的私钥。
      key.store.password为私钥库的密码。
      key.alias.password为私钥的密码。
例如:
key.store=.\\项目私钥.keystore(表示签名放在项目的根目录下)
    key.alias= 项目的alias
    key.store.password=123456
    key.alias.password=123456

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

3、如果项目包含了jni代码,希望在打包时自动重新编译so库,可以修改build.xml文件。
  修改方法为,在引用sdk的build.xml文件之前添加如下target:
  
  
  
      
          
      
      
  
  ndk-build为ndk提供的命令,需要将ndk安装目录添加到环境变量中,添加方法同sdk/tools。
生成的so默认会放到libs/armeabi目录下。


 三、libs 库中的第三方jar包
  如果项目只是引用了第三方jar包,只要将jar包放在libs文件夹下就ok了,ant会在编译打包过程中会自动将第三方jar加进去的。但是当我们的android 项目参考了其他library项目,这时候我们最初在输入android update 命令的时候应该多一个参数 --subprojects : 
 
  你发现报错了,不要着急,这是因为那个library 还不支持ant自动编译,我们需要先让它也支持。
 (1)进入到library项目所在的目录,输入命令 android update lib-project -p . -t 目标版本 (注意是 lib-project);
如:android update lib-project -p . -t android-20
 (2)再回到原项目,输入命令” android update project --name MenudrawSample -p ./ --subprojects -t android-20"

四、 user library库中第三方jar包
  在Android开发中,除了通常在Eclipse中的编译方法之外,有的时候为了进行持续集成,可能还需要用ant进行自动化编译。Android SDK本身已经提供了默认的ant编译脚本,就在每个工程下的build.xml中,其中引用了SDK的编译脚本${sdk_dir}/tools/ant/build.xml 。
  通常情况下,在工程根目录下直接执行 ant debug 即可进行一次正常的build。默认的classpath会包括libs目录下的所有jar文件。但是如果工程中使用了USER LIBRARY,或者引用了外部的jar文件,那么在编译中就可能会遇到问题,因为USER LIBRARY等这些jar文件不会被自动包含在classpath中,这时就要扩展ant的path变量,把自己的jar文件加入到classpath中。
  通过察看sdk提供的build.xml编译脚本,可以发现javac使用的classpath定义如下:、
source="${java.source}" target="${java.target}"
debug="true" extdirs="" includeantruntime="false"
destdir="${out.classes.absolute.dir}"
bootclasspathref="project.target.class.path"
verbose="${verbose}"
classpathref="project.javac.classpath"
fork="${need.javac.fork}">

 其中 project.all.jars.path 包含了所有的jar文件,我们可以通过在工程目录下的build.xml中重新定义这个变量来引入其他的jar文件。
  例如在我的工程中,引用了ormlite这个ORM库,为了能够在开发中使用“attach source”察看源码,该jar文件不能放在libs目录中,因为Eclipse不允许对libs目录中的jar文件“attach source”。
  因此我将此文件放到了libs/ormlite目录中,为了能够将这两个jar文件加入到classpath中,就要重新定义 project.all.jars.path 这个元素。
  基本思路是,重新定义 -pre-compile这个target,在其中重新定义 project.all.jars.path 的值。
  这段代码写在哪里呢?在每个项目的build.xml中引用了当前目录下的custom_rules.xml,那么我们就在项目根目录下创建一个custom_rules.xml,内容如下:


三、实现自动打签名apk
最后在项目跟目录\bin下生成apk包:cmd > ant clean 清理
ant release 打正式包
ant debug 打debug包
ant clean release 先清理,再打包

打完的apk包,在项目的bin目录下

要替换sdk中的build.xml文件地址:
http://download.csdn.net/detail/baopengjian/9662063


你可能感兴趣的:(android,ant,自动打包,ant打包,App自动打包,Android应用)