基本配置--build.properties

首先编写基本配置build.properties ,主要配置如下:

  • android sdk所在目录
  • 编译项目所使用的项目版本
  • Jdk所在目录
  • 以及签名时,所需要的密钥文件名称和密码等信息(keystore文件存在在主工程根目录下)
  • 以下标红的信息请注意替换成自己的skd等所在目录。
sdk.home= E: \\android_env\\android-sdks-new
sdk.platform= android-15
jdk.home= D: \\Java\\jdk1.6.0_16
keystore.password= 123456
keystore.name= my.keystore
keystore.alias= read

项目配置--auto-build.properties:

  • 主工程绝对路径
  • lib库1的绝对路径
  • lib库2的绝对路径
  • 打包工程的绝对路径

因为这些都是绝对路径,所以大家在下载demo后,在eclipse中附加工程时,请注意勾选copy to workspace选项。防止出现找不到文件路径的问题。以下绝对路径也注意要修改成自己工作空间所在的绝对路径。


mainproject.abs= E:\\linshi-workspace\\testAutobuild
libproject.abs= E:\\linshi-workspace\\testLibOne
libproject2.abs= E:\\linshi-workspace\\testLibTwo
curproject.abs= E:\\linshi-workspace\\auto-builder


重要的是Ant构建脚本

<? xml version= "1.0" encoding = "gbk"?>
<!-- Build an Android project. -->
< project
name= "testAutobuild"
default= "10zipalign"
basedir= "." > <!-- 通用属性 --> <property file= "build.properties" /> <!-- 项目属性 --> <property file= "auto-build.properties" /> <!-- 工程相关配置 --> <property
name= "libproject.abs.res"
location= "${libproject.abs}\res" /> <property
name= "libproject.abs.src"
location= "${libproject.abs}\src" /> <property
name= "libproject.abs.lib"
location= "${libproject.abs}\libs" /> <property
name= "libproject.package.name"
value= "com.liubing.testLibOne" /> <!-- lib2工程相关配置 --> <property
name= "libproject2.package.name"
value= "com.liubing.testlibtwo" /> <property
name= "libproject2.abs.res"
location= "${libproject2.abs}/res" /> <property
name= "libproject2.abs.src"
location= "${libproject2.abs}/src" /> <property
name= "libproject2.abs.lib"
value= "${libproject2.abs}/libs" /> <!-- The absolute paths for the tools. --> <property
name= "android.framework"
value= "${sdk.home}/platforms/${sdk.platform}/framework.aidl" >
</property > <property
name= "android.core"
value= "${sdk.home}/platforms/${sdk.platform}/android.jar" >
</property > <property
name= "android.proguard"
value= "${sdk.home}/tools/proguard/lib/proguard.jar" >
</property > <property
name= "android.support.lib"
value= "${sdk.home}/tools/support" >
</property > <property
name= "jarsigner"
value= "${jdk.home}/bin/jarsigner.exe" >
</property > <property
name= "zipalign"
value= "${sdk.home}/tools/zipalign.exe" >
</property > <property
name= "dx"
value= "${sdk.home}/platform-tools/dx.bat" >
</property > <property
name= "apk-builder"
value= "${sdk.home}/tools/apkbuilder.bat" >
</property > <property
name= "aapt"
value= "${sdk.home}/platform-tools/aapt.exe" >
</property > <property
name= "aidl"
value= "${sdk.home}/platform-tools/aidl.exe" >
</property > <property
name= "adb"
value= "${sdk.home}/platform-tools/adb.exe" >
</property > <!-- The absolute path. --> <property
name= "src.abs"
value= "${mainproject.abs}/src" >
</property > <property
name= "bin.abs"
value= "${mainproject.abs}\bin" >
</property > <property
name= "gen.abs"
value= "${mainproject.abs}/gen" >
</property > <property
name= "res.abs"
value= "${mainproject.abs}/res" >
</property > <property
name= "assets.abs"
value= "${mainproject.abs}/assets" >
</property > <property
name= "androidManifest.abs"
value= "${mainproject.abs}/AndroidManifest.xml" >
</property > <property
name= "dex.abs"
value= "${mainproject.abs}/bin/classes.dex" >
</property > <property
name= "resources.abs"
value= "${mainproject.abs}/bin/resources.ap_" >
</property > <property
name= "unsigned.abs"
value= "${bin.abs}/${ant.project.name}-unsigned.apk" >
</property > <property
name= "signed.abs"
value= "${bin.abs}/${ant.project.name}-signed.apk" >
</property > <property
name= "keystore.path"
location= "${mainproject.abs}/${keystore.name}" /> <!-- 1.Cleaning the project --> <target name= "1clean" > < echo>
Cleaning the project... </ echo> < delete
includeemptydirs ="true"
verbose= "true" > < fileset
dir= "${bin.abs}"
includes= "**/*" >
</ fileset>
</ delete> < delete
includeemptydirs ="true"
verbose= "true" > < fileset
dir= "${gen.abs}"
includes= "**/*" >
</ fileset>
</ delete>
</target > <!-- 2 Generate R.java --> <target
name= "2generate"
depends= "1clean" > < echo>
Generating R.java / Manifest.java from the resources... </ echo> < exec
executable ="${aapt}"
failonerror ="true" > < arg value= "package" /> < arg value= "-f" /> < arg value= "-m" /> < arg value= "--auto-add-overlay" /> < arg value= "-J" /> < arg value= "${gen.abs}" /> < arg value= "-M" /> < arg value= "${androidManifest.abs}" /> < arg value= "-S" /> < arg value= "${res.abs}" /> < arg value= "-S" /> < arg value= "${libproject.abs.res}" /> < arg value= "-S" /> < arg value= "${libproject2.abs.res}" /> < arg value= "--extra-packages" /> < arg value= "${libproject.package.name}:${libproject2.package.name}" />
<!-- Library Project的包名 --> < arg value= "-I" /> < arg value= "${android.core}" />
</ exec>
</target > <!-- 3Convert and compile AIDL files. --> <target
name= "3aidl"
depends= "1clean" > < echo>
Compiling aidl files into Java classes... </ echo> < apply
executable ="${aidl}"
failonerror ="true" > < arg value= "-p${android.framework}" /> < arg value= "-I${src.abs}" /> < arg value= "-o${gen.abs}" /> < fileset dir= "${src.abs}" > < include name= "**/*.aidl" >
</ include>
</ fileset>
</ apply>
</target > <!--
4Compile
srcdir="${framework_src.abs}:${src.abs}:${gen.abs}" 表示编译的源文件目录有三个 --> <target
name= "4compile"
depends= "1clean,2generate,3aidl" > < javac
encoding= "UTF-8"
target= "1.6"
debug= "off"
extdirs= ""
includeantruntime ="false"
srcdir ="${src.abs}:${gen.abs}:${libproject.abs.src}:${libproject2.abs.src}"
destdir= "${bin.abs}"
bootclasspath ="${android.core}" > < classpath> < fileset
dir= "${libproject.abs.lib}"
includes= "*.jar" >
</ fileset>
</ classpath> < classpath> < fileset
dir= "${android.support.lib}"
includes= "*.jar" >
</ fileset>
</ classpath> < classpath> < fileset
dir= "${libproject2.abs.lib}"
includes= "*.jar" >
</ fileset>
</ classpath>
</ javac>
</target > <!-- 5Convert and compress .class files to .dex file. --> <target
name= "5dex"
depends= "4compile" > < echo>
Converting compiled files and external libraries into dex format file... </ echo> < apply
executable ="${dx}"
failonerror ="true"
parallel= "true" > < arg value= "--dex" /> < arg value= "--output=${dex.abs}" /> < arg path= "${bin.abs}" /> < fileset
dir= "${libproject.abs.lib}"
includes= "*.jar" >
</ fileset> < fileset
dir= "${libproject2.abs.lib}"
includes= "*.jar" />
</ apply>
</target > <!-- 6Package the resources. --> <target name= "6package" > < echo>
Packaging resources and assets... </ echo> < exec
executable ="${aapt}"
failonerror ="true" > < arg value= "package" /> < arg value= "-f" /> < arg value= "-m" /> < arg value= "--auto-add-overlay" /> < arg value= "-M" /> < arg value= "${androidManifest.abs}" /> < arg value= "-S" /> < arg value= "${res.abs}" /> < arg value= "-S" /> < arg value= "${libproject.abs.res}" /> < arg value= "-S" /> < arg value= "${libproject2.abs.res}" /> < arg value= "-A" /> < arg value= "${assets.abs}" /> < arg value= "-I" /> < arg value= "${android.core}" /> < arg value= "-F" /> < arg value= "${resources.abs}" />
</ exec>
</target > <!-- 7Package an unsigned APK file. --> <target
name= "7genUnsignedApk"
depends= "5dex, 6package" > < echo>
Packaging an unsigned APK file... </ echo> < exec
executable ="${apk-builder}"
failonerror ="true" > < arg value= "${unsigned.abs}" /> < arg value= "-u" /> < arg value= "-z" /> < arg value= "${resources.abs}" /> < arg value= "-f" /> < arg value= "${dex.abs}" /> < arg value= "-rf" /> < arg value= "${src.abs}" /> <!-- 加jar库到应用包中 --> < arg value= "-rj" /> < arg value= "${libproject.abs.lib}" /> <!-- 加动态连接库到应用包中 --> < arg value= "-nf" /> < arg value= "${libproject.abs.lib}" />
</ exec> < echo>
It will need to be signed with jarsigner before being published. </ echo>
</target > <!-- 9Sign the APK. --> <target
name= "9genSignedApk"
depends= "7genUnsignedApk" > < exec
executable ="${jarsigner}"
failonerror ="true" > < arg value= "-verbose" /> < arg value= "-storepass" /> < arg value= "${keystore.password}" /> < arg value= "-keystore" /> < arg value= "${keystore.path}" /> < arg value= "-signedjar" /> < arg value= "${signed.abs}" /> < arg value= "${unsigned.abs}" /> < arg value= "${keystore.alias}" />
</ exec>
</target > <!-- 10Zipalign --> <target
name= "10zipalign"
depends= "9genSignedApk" > < exec
executable ="${zipalign}"
failonerror ="true" > < arg value= "-v" /> < arg value= "-f" /> < arg value= "4" /> < arg value= "${signed.abs}" /> < arg value= "${bin.abs}\${ant.project.name}-final.apk" />
</ exec>
</target > </ project>

  注意事项:脚本中配置了项目的名称,注意可以改成自己的项目名称

                      两个lib库的包名,可根据自己需要增加或者删除

省去若干调试,查询资料过程若干……终于跑通了

这样,我们的自动打包就算初具雏形,跑一下ant脚本,就可以将包自动打出来。

所有资源
点我下载


  
  原文链接:
http://www.67tgb.com/?p=630

  转载注明:
望月听涛

android多lib库工程的自动批量构建--编写ant脚本的更多相关文章

  1. android多lib库工程的自动批量构建--准备

    打包这个活儿吧,本来没什么技术含量,千篇一律的更改渠道名称,然后编译,签名即可.但是如果发布渠道比较多的话,这种重复工作让人烦不胜烦.我们的应用发布渠道有30多个,若是手工打包,基本不用做其他的事情了 ...

  2. android studio依赖库工程Activity显示问题及库工程设置

    android studio引用库工程其实不难,直接添加依赖module即可,但是我在操作过程中出现一些奇怪的问题,苦扰我一整天,为了祭奠这苦命的一天特别mark一下. 首先描述一下我的错误现象: s ...

  3. Android so lib库远程http下载和动态注册

    一.背景 在开发Android应用程序的实现,有时候需要引入第三方so lib库,但第三方so库比较大,例如开源第三方播放组件ffmpeg库, 如果直接打包的apk包里面, 整个应用程序会大很多.经过 ...

  4. vim—自动缩进(编写Python脚本)

    大神推荐使用vim编写Python脚本,学而时积之,不亦乐乎! 使用vim编写Python脚本的时候不能正常缩进,需要修改vimrc文件 Ubuntu系统下vimrc文件的位置: $ cd /etc/ ...

  5. 如何把一个android工程作为另外一个android工程的lib库

    http://zhidao.baidu.com/question/626166873330652844 一个工程包含另一个工程.相当于一个jar包的引用.但又不是jar包反而像个package 在网上 ...

  6. [Android Pro] Android 4.1 使用 Accessibility实现免Root自动批量安装功能

    reference to  :  http://www.infoq.com/cn/articles/android-accessibility-installing?utm_campaign=info ...

  7. 新建Android工程没有自动生成R.JAVA,应该先升级下ADT

    前几天非常郁闷,本来计划在Android上做个小东西,结果打开Eclipse新建工程,发现居然没有R.JAVA! 反复测试很多次,均未成功,最后试着升级了下ADT,结果搞定,在这里记下,下次遇到这样的 ...

  8. android 如何添加第3方lib库到kernel中

    注意:只能将lib库放在kernel编译到的地方,如下: alps/kernel/ alps/mediatek/custom/common/kernel/ alps/mediatek/custom/$ ...

  9. android项目引入第三方库工程出现的问题及解决方案

    一.导入libar库工程 1.使用第三方库工程libary,基本上都是从github上下载,解压后里面有个libary文件夹 2.将libary导入到eclipse中,步骤如下 1)在eclipse包 ...

随机推荐

  1. RSA_JS_PHP加密解密

    root@DESKTOP-I4OIMJC /cygdrive/e/html/RSA_JS_PHP/openssl/bin # ./openssl.exe OpenSSL> genrsa -out ...

  2. django之设置分页

    分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据, ...

  3. rabbitMQ消息队列1

    rabbitmq 消息队列 解耦 异步 优点:解决排队问题 缺点: 不能保证任务被及时的执行 应用场景:去哪儿, 同步 优点:保证任务被及时的执行 缺点:排队问题 大并发 Web nginx 1000 ...

  4. 关于在Arduino中调用DS1302模块

    DS1302时钟模块中的电池是起掉电保存作用的,在实际运行中必须给他的GND和VCC供电,否则得到的是错误的时间. 也就是说,电池是保存日期的,而无法提供芯片正常运行所需的电力. 从芯片引脚上可以看出 ...

  5. GetEnumName 枚举名称 字符串

    System.TypInfo.pas System.TypInfo.hpp http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.TypIn ...

  6. RouterOS DNS劫持(转)

    什么是DNS劫持 DNS劫持就是通过技术手段,来控制用户解析域名的IP地址.举个例子,正常解析域名www.awolf.net时应该返回IP:64.64.30.60:但现在通过DNS劫持,使域名www. ...

  7. pip 18.1 官方文档翻译

    快速开始 从pypi上安装一个包 $ pip install SomePackage 查看安装的包里面包含什么文件 pip show --files SomePackage 查看已经安装的包里面哪些是 ...

  8. 201671010127 2016-2017-18 Java期末总结

    通过本学期Java课程的学习,我对于面向对象的编程语言有了进一步的了解.首先面向对象编程的特点是抽象.封装.继承.多态.由于已经学过c语言,所以对Java的学习实际上是从第四章对向与类开始的,然后学习 ...

  9. Mesos的资源分配

    Apache Mesos能够成为最优秀的数据中心资源管理器的一个重要功能是面对各种类型的应用,它具备像交警一样的疏导能力.本文将深入Mesos的资源分配内部, 探讨Mesos是如何根据客户应用需求,平 ...

  10. JRE,JVM,JDK

    JRE,JVM,JDK的关系.JRE(Java Runtime Environment)java运行环境,我们可以把它看成是一个操作系统.也就是说JRE提供了Java执行的软件平台. JVM (Jav ...