Android使用Ant进行apk多渠道打包

标签: android ant apk | 发表时间:2015-08-30 07:47 | 作者:javalearns
出处:http://www.iteye.com

关注微信号:javalearns   随时随地学Java

或扫一扫

 

 

随时随地学Java

前言:

Ant 是什么?

详细介绍请看http://ant.apache.org/

总之一句话:Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。

准备工作:

android sdk中默认支持使用ant来执行编译动作。但是要想使用ant来进行编译,还需要ant的执行环境。

为了能顺利使用ant来编译,我们需要如下准备:

1,android sdk,最简单的是下载一个adt bundle即可;

2,ant包,下载链接:http://ant.apache.org/bindownload.cgi,将压缩包下载完解压到某个目录即可。

3,ant-contrib.jar,这个jar主要用来支持编译的批量操作,下载地址http://mirrors.ibiblio.org/maven2/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar,下完之后放到步骤2解压目录的lib目录。

参考:

关于android编译生成apk的流程,可以参照http://www.oschina.net/code/snippet_16_6782,

其实有个偷懒的方式,就是借用 android sdk的tools/ant/目录中build.xml文件内已定义好的动作,主要是用到”release”。

下面主要介绍一下基于已定义好的release,怎么修改实现自己的build.xml文件。

步骤:

首先介绍一下build.xml文件中变量的定义格式如下,后面会用到

1 <property name=”key_sample” value=”value_sample” />

1,对生成目录做必要的清除动作,起名为myClean,这里我删除了生成目录下的所有apk文件。

1     <target name="myClean">
2         <mkdir dir="${outputDir}"/>
3         <delete verbose="true">
4             <fileset dir="${outputDir}" includes="*.apk" />
5         </delete>
6     </target>

outputDir是我事先定义好的变量:

1 <property name=”outputDir” value=”../output”/>

2,加载渠道信息,并使用ant的 foreach功能实现批量打包;

1 <target name="myPackChannels">
2   <foreach target="myPackBuild" list="${build.channels}" param="build.channel" delimiter=",">
3   </foreach>
4 </target>

可以看到这里是从 ${build.channels} 中读取相关渠道信息,多渠道中间用,分隔;

build.channels=101,201,301

3,将当前的AndroidMenifest.xml复制到备份目录;

1 <target name="myBackupManifest">
2   <delete file="${build}/${manifest}" />
3   <copy file="${manifest}" tofile="${build}/${manifest}" overwrite="true"/>
4 </target>

4,修改当前的AndroidMenifest.xml里面的内容,比如channel值;

 1     <target name="myPrepareBuildinfo" depends="myLoadBuildInfo">
 2         <replaceregexp flags="g" byline="true" encoding="UTF-8">
 3             <regexp pattern='android:versionCode="(.*)"' />
 4             <substitution expression='android:versionCode="${buildVersionCode}"' />
 5             <fileset dir="" includes="${manifest}" />
 6         </replaceregexp>
 7         <replaceregexp flags="g" byline="true" encoding="UTF-8">
 8             <regexp pattern='android:versionName="(.*)"' />
 9             <substitution expression='android:versionName="${buildVersionName}"' />
10             <fileset dir="" includes="${manifest}" />
11         </replaceregexp>
12         <replaceregexp flags="g" byline="true" encoding="UTF-8">
13             <regexp pattern='android:value="@string/APP_CHANNEL"'/>
14             <substitution expression='android:value="${build.channel}"'/>
15             <fileset dir="" includes="${manifest}" />
16         </replaceregexp>
17     </target>

我这里执行了修改versionName,versionCode和APP_CHANNEL这三个值。

5,执行release动作;

6,针对4生成的unsigned apk 用自己的签名文件签名;

 1 <!-- 签名 -->
 2      <target name="mySign">
 3         <mkdir dir="${outputDir}"/>
 4         <java jar="${signjar}" fork="true" failonerror="true" maxmemory="128m">
 5              <arg value="-w"/>
 6              <arg value="${key_pem}"/>
 7              <arg value="${key_pk8}"/>
 8              <arg value="${binDir}/${build.name}-release-unsigned.apk"/>
 9              <arg value="${binDir}/${build.name}-release-signed.apk"/>
10          <classpath>
11            <pathelement location="${signjar}"/>
12          </classpath>
13         </java>
14         
15         <property name="outName" value="${outputDir}/${build.name}-${buildVersionName}-${buildVersionCode}-${build.channel}-${build.timestamp}-${buildNumber}"/>
16         
17         
18         <zipalign-helper in.package="${binDir}/${build.name}-release-unsigned.apk"
19                         out.package="${outName}.apk" />
20         <copy file="${mapping}" tofile="${outName}-mapping.txt"  overwrite="true"/>
21     </target>

7,repeat  step3,4,5;(这就是动作2 foreach的执行)

8,恢复之前备份的AndroidMenifest.xml到当前目录;

1 <target name="myRestoreManifest">
2   <copy file="${build}/${manifest}" tofile="${manifest}" overwrite="true"/>
3   <delete file="${build}/${manifest}" />
4 </target>

最后,整理一下要执行的步骤:

1     <target name=".output" depends="myClean, myBackupManifest, myLoadBuildInfo, myPackChannels, myRestoreManifest,myUpdateBuilderNumber">
2     </target>

so,在你的build.xml所在的目录,执行ant .output 即可,大功告成!

关注微信号:javalearns   随时随地学Java

或扫一扫

 

 

随时随地学Java



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [android ant apk] 推荐:

Android使用Ant进行apk多渠道打包

- - 移动开发 - ITeye博客
关注微信号:javalearns   随时随地学Java. 详细介绍请看http://ant.apache.org/. 总之一句话:Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能. android sdk中默认支持使用ant来执行编译动作. 但是要想使用ant来进行编译,还需要ant的执行环境.

使用ant自动编译、打包生成apk文件

- - CSDN博客移动开发推荐文章
    上次使用命令行生成apk文件 《Android 命令行编译、打包生成apk文件》,学习命令行生成的目的是为了编写ant打下基础. 下载ant包,配置环境变量. 二、ant编译Android项目. Java代码生成class文件. aapt命令, 生成R文件. -f 如果编译生成的文件已经存在,强制覆盖.

android apk反编译

- - CSDN博客推荐文章
3.查看Jar包的GUI工具. apk文件其实就是一个MIME为zip的压缩包,可以用winrar软件打开看到里面的文件结构. 解压缩后找到里面的classes.dex文件,classes.dex文件就是java文件编译再通过Dalvik须立即提供的dx打包工具打包而成的,接下来就用2个工具来逆向导出java源文件.

Android APK反编译详解(附图)

- jason - iGFW
一、反编译Apk得到Java源代码. 首先要下载两个工具:dex2jar和JD-GUI. 前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码. 首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;解压下载的 dex2jar,将classes.dex复制到dex2jar.bat所在目录.

ant编译android工程用批处理打包

- - 移动开发 - ITeye博客
1.先配置文件目录:. #project name and version. #keysore file  . #library project. 2.编写build.xml.

HP TouchPad 灵魂不死,Android 附身且带 APK 应用安装

- 品味视界 - Engadget 中国版
惠普的 TouchPad 已经 Android 附身好几次了,不过这次来的有点不同,开发者来自中国,同时是在 WebOS 上调用 Android 系统了. 整个系统通过 .ipk 文件完成安装,整个操控还算流畅,虽然有时候切换主屏和应用程序(比如 Youtube 视频)会感到停顿. 安装应用需下载想要的 apk 文件,放到 U 盘的 apks 目录,进入系统之后就可以发现并安装.

教你用电脑从 Google Play 下载 Android 程序 apk 文件

- - 小众软件 - Appinn
APK Downloader 是一款帮助你用电脑从 Google Play (原 Android Market ) 下载 Android 应用程序 apk 文件的 Chrome 扩展. Ivan 同学在 Group 讨论组 里推荐了一个用电脑从 Google Play 里下载 Android 程序的方法,可以直接下载到 apk 文件.

(搬运工)Android APK反编译详解(附图)

- - C++博客-首页原创精华区
这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件. 本文Android反编译教程,测试环境:.

Android 命令行编译、打包生成apk文件

- - CSDN博客移动开发推荐文章
安装JDK 和 Android SDK. 项目目录:D:\ProjectDemo. SDK目录 :D:\android-sdk-windows\platforms\android-8\. 二、命令行编译Android项目. Java代码生成class文件. aapt命令, 生成R文件. -f 如果编译生成的文件已经存在,强制覆盖.

Android中的Apk的加固(加壳)原理解析和实现

- - CSDN博客推荐文章
今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理. 我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk,结果被人反编译了,那心情真心不舒服. 虽然我们混淆,做到native层,但是这都是治标不治本. 反编译的技术在更新,那么保护Apk的技术就不能停止.