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 l

不废话, 直接上货

<?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这种字符串无从下手的时候, 万能的搜索帮了大忙


小疑惑:


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


参考






目录
相关文章
|
6天前
|
Linux Android开发 iOS开发
使用Kivy创建“Hello World”应用并打包成APK
使用Kivy创建“Hello World”应用并打包成APK
|
17天前
|
开发框架 Dart 前端开发
Android 跨平台方案对比之Flutter 和 React Native
本文对比了 Flutter 和 React Native 这两个跨平台移动应用开发框架。Flutter 使用 Dart 语言,提供接近原生的性能和丰富的组件库;React Native 则基于 JavaScript,具备庞大的社区支持和灵活性。两者各有优势,选择时需考虑团队技能和项目需求。
100 8
|
1月前
|
Web App开发 网络协议 Android开发
Android平台一对一音视频通话方案大比拼:WebRTC VS RTMP VS RTSP,谁才是王者?
【9月更文挑战第4天】本文详细对比了在Android平台上实现一对一音视频通话时常用的WebRTC、RTMP及RTSP三种技术方案。从技术原理、性能表现与开发难度等方面进行了深入分析,并提供了示例代码。WebRTC适合追求低延迟和高质量的场景,但开发成本较高;RTMP和RTSP则在简化开发流程的同时仍能保持较好的传输效果,适用于不同需求的应用场景。
58 1
|
2月前
|
Android开发
Android 配置蓝牙遥控器键值
本文详细介绍了Android系统中配置蓝牙遥控器键值的步骤,包括查看设备号、配置键位映射文件(kl文件)、部署kl文件以及调试过程,确保蓝牙遥控器的按键能正确映射到Android系统对应的按键功能。
46 1
|
2月前
|
存储 安全 API
Android经典实战之存储方案对比:SharedPreferences vs MMKV vs DataStore
本文介绍了 Android 开发中常用的键值对存储方案,包括 SharedPreferences、MMKV 和 DataStore,并对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。
47 1
|
2月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
84 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
2月前
|
Ubuntu Android开发
安卓系统调试与优化:(一)bootchart 的配置和使用
本文介绍了如何在安卓系统中配置和使用bootchart工具来分析系统启动时间,包括安装工具、设备端启用bootchart、PC端解析数据及分析结果的详细步骤。
86 0
安卓系统调试与优化:(一)bootchart 的配置和使用
|
2月前
|
Android开发 C++ 开发者
Android经典实战之跨平台开发方案:Kotlin Multiplatform vs Flutter
本文对比了Kotlin Multiplatform与Flutter两大跨平台开发框架,从技术特性、性能、开发效率、UI体验、可扩展性及适用场景等维度进行了详尽分析,帮助开发者根据项目需求和技术背景选择最优方案。
59 2
|
2月前
|
XML 安全 Android开发
Flutter配置Android和IOS允许http访问
Flutter配置Android和IOS允许http访问
50 3
|
2月前
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
90 12

热门文章

最新文章

下一篇
无影云桌面