首页 > 其他 > 详细

Ant编译打包以及批量打包

时间:2014-02-17 19:48:41      阅读:534      评论:0      收藏:0      [点我收藏+]

一、目的

        1、针对目前多个渠道发布,需要根据不同渠道编译相应的apk包,如果单纯依靠工程师手动编译,严重影响了开发效率

        2、每次修复产品bug, 测试都会要求工程师发布测试包进行验证,如果利用脚本实现debug版本的编译,会降低时间成本

        3、避免手动编译造成的不必要错误,影响产品发布

二、具体要求

        1、由于笔者所用开发环境为ubuntu, 在此先以linux 实现为例,讲解如何实现ant 编译和批量打包

        2、为尽量适配更多的项目,我们的工程在配置上尽量复杂些,如依赖多个jar包,多个类库,并且要求代码混淆

三、技术实现

        ubuntu 配置 ant 环境,sudo apt-get install ant

        利用Android SDK工具,通过Ant脚本编译,以及循环编译打包,实现多渠道apk的生成

       单一打包步骤:

             1、针对依赖工程,配置好依赖关系

                  如 project.properties 文件,配置好 android.library=true, 指明这是一个依赖工程,避免Ant编译时误认为是一个Android项目。

             2、代码混淆部分保证没问题(这个如果有需要,后面会详细再讲)

             3、利用 SDK 工具,生成 build.xml 文件

                   sdk路径: /..path../sdk/tools/android

                   命令如下: ../sdk/tools/androidupdate project -s -n [projectName] -t [android-version] -p [path]

                   eg: android update project -s -n Example -t android-17 -p ./

                   简单解释一下命令:

      -s --subprojects: Also updates any projects in sub-folders, such as test projects

      -n --name : Project name.

      -t --target : Target ID to set for the project.

      -p --path : The project‘s directory. [required]      

             4、利用Ant进行编译,打包。根据debug or release 模式进行编译,如: ant debug  或者 ant release

                   等待编译完成,会在bin目录下生成相应的apk包, eg: 如 Example-debug.apk  或者 Example-release.apk

        批量打包步骤:

               1、Ant不支持for循环,但是ant支持第三方扩展包,这里我们利用 ant-contrib-1.0b3.jar 来实现foreach循环, 如下配置文件中指定这个jar包的路径

                    这里我们要定义渠道ID,每次打包完毕替换相应的ID.

                    另外,channel_id 需要我们在AndroidManifest.xml文件application标签内添加,例如 <meta-data android:name="channel_id" android:value="91" />

                    工程根目录下,定义规则文件custom_rules.xml, 并且在之前update生成的build.xml里引用此文件

                    注意:一定要在<import file="${sdk.dir}/tools/ant/build.xml" />之前引用 <import file="custom_rules.xml" optional="true" />,否则ant会找不到此规则。

              custom_rules.xml 文件内容 如下:            

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project name="custom_rules" >
  3. <taskdef resource="net/sf/antcontrib/antcontrib.properties" >
  4.     <classpath>
  5.         <pathelement location="lib/ant-contrib-1.0b3.jar" />
  6.     </classpath>
  7. </taskdef>
  8. <target name="deploy" >
  9.     <mkdir dir="${apk.dir}" />
  10.     <foreach
  11.         delimiter=","
  12.         list="${market_channels}"
  13.         param="channel"
  14.         target="modify_manifest" >
  15.     </foreach>
  16. </target>
  17. <target name="modify_manifest" >
  18.     <replaceregexp flags="g" byline="false">
  19.         <regexp pattern="android:name=&quot;channel_id&quot; android:value=&quot;(.*)&quot;" />
  20.         <substitution expression="android:name=&quot;channel_id&quot; android:value=&quot;${channel}&quot;" />
  21.         <fileset
  22.             dir=""
  23.             includes="AndroidManifest.xml" />
  24.     </replaceregexp>
  25.    <property
  26.         name="out.final.file"
  27.         location="${apk.dir}/Example_${apk.version}_${channel}.apk" />
  28.     <antcall target="clean" />
  29.     <antcall target="release" />
  30. </target>
  31. </project>

           2、工程根目录下定义local.properties文件,声明sdk.dir, market_channels,apk.dir等参数并赋值,例如:

  1.                sdk.dir=/home/android/develop/sdk
  2.                market_channels=91,360
  3.                apk.dir=/home/android/develop/apks
  4.                apk.version=371

          注意:ant脚本不会自动创建保存apk的目录,所以目标文件夹/home/android/develop/apks必须提前创建,否则在zipalign时候会报错, 这里通过 <mkdir dir="${apk.dir}" /> 脚本实现了。

            3、如果需要签名,需要配置keystore的密码,如果不配置,每次编译都会要求输入密码并确认密码。

                 配置文件:工程根目录下定义 ant.properties, 具体内容如下(不包括[ ]):         

  1. key.alias=android.keystore
  2. key.store.password=[your keystore password]  
  3. key.store=release.keystore
  4. key.alias.password=[your keystore password]

           4、进行打包编译:

                运行target 任务, ant deploy, 进行批量打包。

四、关于windows

           除了 Ant 配置不同,其他一样。在此不再赘述。有不对的地方,请多指正,感谢~

Ant编译打包以及批量打包

原文:http://www.cnblogs.com/androideng/p/3552550.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!