Ant打包安卓apk(5)-多渠道(配置)打包方案 ant脚本

不废话, 直接上货

<?xml version="1.0" encoding="UTF-8"?>
<project name="MyProject" default="init" basedir=".">
  <description>
    simple example build file
  </description>

  <!-- 使用第三方的ant包,使ant支持for循环-->
  <taskdef resource="net/sf/antcontrib/antcontrib.properties">
    <classpath>
      <pathelement location="${env.ANT_HOME}/lib/ant-contrib-1.0b3.jar"/>
    </classpath>
  </taskdef>

  <!-- set global properties for this build -->
  <property file="build.properties" />

  <property name="inDir" location="in"/>
  <property name="outDir" location="out"/>
  <property name="build-tools" location="android-sdk/build-tools/27.0.3"/>
  <property name="netease-tools" location="netease-tools"/>

  <property name="apksigner.jar" location="${build-tools}/lib/apksigner.jar"/>
  <property name="makechannels.jar" location="${netease-tools}/makechannels.jar"/>
  <property name="netease-apksigner.jar" location="${netease-tools}/apksigner.jar"/>

  <property name="appName.apk" value="${inDir}/${appName}"/>
  <!-- 多渠道打包配置 -->
  <property name="channels.txt" location="${inDir}/channels.txt"/>
  <!-- keystore配置 -->
  <property name="key.store.path" location="${inDir}/${key.store}"/>

  <property name="zipalign" value="${build-tools}/zipalign" />

  <!-- Create the time stamp -->
  <tstamp>
    <format property="DSTAMP" pattern="yyMMdd" timezone="GMT+8"/>
  </tstamp>

  <target name="init">
    <!-- Create the build directory structure used by compile -->
    <mkdir dir="${build}"/>
  </target>

  <target name="verifyApk" description="checking whether signatures of APK files will verify on Android devices.">
    <!-- Cannot execute a jar in non-forked mode. Please set fork='true'. -->
    <java jar="${apksigner.jar}" fork="true">
      <arg value="verify" />
      <arg value="--verbose" />
      <arg value="${appName.apk}" />
    </java>
  </target>

  <target name="zipalignCheck">
    <exec executable="${zipalign}">
      <arg value="-c" />
      <arg value="-v" />
      <arg value="4" />
      <arg value="${appName.apk}" />
    </exec>
  </target>

  <target name="makechannels" description="makechannel info each">
    <java jar="${makechannels.jar}" fork="true">
      <arg value="-apk" />
      <arg value="${appName.apk}" />
      <arg value="-config" />
      <arg value="${channels.txt}" />
      <arg value="-out" />
      <arg value="${outDir}" />
    </java>
  </target>

  <target name="apksigner" description="可重新签名单个文件 或 文件夹">
    <java jar="${netease-apksigner.jar}" fork="true">
      <arg value="-appname" />
      <arg value="test" />
      <arg value="-keystore" />
      <arg value="${key.store.path}" />
      <arg value="-pswd" />
      <arg value="${key.store.password}" />
      <arg value="-alias" />
      <arg value="${key.alias}" />
      <arg value="-aliaspswd" />
      <arg value="${key.alias.password}" />
      <arg value="-v1" />
      <arg value="true" />
      <arg value="-v2" />
      <arg value="false" />
      <arg value="${outDir}" />
    </java>
  </target>

  <target name="zipalignItem" description="对单个文件进行zipalign">
    <echo>取出原始${itemAppName}</echo>

    <!-- 通过${itemAppName}构建${newApkName} -->
    <loadresource property="newApkName" encoding="UTF-8">
      <string value="${itemAppName}" />
      <filterchain>
        <tokenfilter>
          <!-- 巧妙将后缀.apk加上了时间 -->
          <replaceregex pattern=".apk" replace="_zipalign.apk" flags="g" />
        </tokenfilter>
      </filterchain>
    </loadresource>
    <echo>开始构建${newApkName}</echo>
    <exec executable="${zipalign}">
      <arg value="-f" />
      <arg value="-v" />
      <arg value="4" />
      <arg value="${itemAppName}" />
      <arg value="${newApkName}" />
    </exec>
  </target>

  <target name="easyChannels">
    <!--  0. 清理历史数据 -->
    <antcall target="clean" />

    <!--  1. 根据channels文件进行多渠道打包 -->
    <antcall target="makechannels" />

    <!--  2. 集体重新签名 -->
    <antcall target="apksigner" />

    <!--  3. 遍历并zipalign -->
    <foreach param="itemAppName" target="zipalignItem">
      <path>
        <fileset dir="${outDir}">
          <include name="*.apk"/>
        </fileset>
      </path>
    </foreach>
  </target>

  <target name="clean" description="clean up">
    <!-- 避免删除了重复删除文件夹的尴尬, 有必要吗? -->
    <delete>
      <fileset dir="${outDir}" />
    </delete>
  </target>

</project>

优点:

  • 并不是说ant淘汰了, 由于不参与构建apk, 只是拿到apk包到重新多渠道后签名和zipalign优化, 速度还是比较可观的.

笔记:

  • 需要提交配置好环境变量
  • 日期时间戳dstamp、tsdamp、today的应用, 尼玛HH:mm才是二十四小时, hh:mm是十二小时制
  • FilterChain是个好东西, 本来对于正则表达式理解的不深, 然后ant对Properties的value这种字符串无从下手的时候, 万能的搜索帮了大忙

小疑惑:

  • 采用删除文件下所有文件, 而不是包括文件夹, 我想知道这个有没有必要

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,939评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,709评论 2 59
  • 在此特此声明:一下所有链接均来自互联网,在此记录下我的查阅学习历程,感谢各位原创作者的无私奉献 ! 技术一点一点积...
    远航的移动开发历程阅读 11,092评论 12 197
  • 相信大家都对EventBus这个很热门的工具很熟悉了,最近更新开发新框架的缘故,接触到Retrofit 2 和 R...
    kuwork阅读 7,999评论 13 15
  • 根据我的书本知识,我坚信傲慢是一种流弊,人性在这一方面极为脆弱,因为我们很少有人不因为自己的某种品质或者其它什么而...
    Sunny飞镜阅读 88评论 0 0