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


小疑惑:


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


参考






目录
相关文章
|
10月前
|
数据采集 监控 API
告别手动埋点!Android 无侵入式数据采集方案深度解析
传统的Android应用监控方案需要开发者在代码中手动添加埋点,不仅侵入性强、工作量大,还难以维护。本文深入探讨了基于字节码插桩技术的无侵入式数据采集方案,通过Gradle插件 + AGP API + ASM的技术组合,实现对应用性能、用户行为、网络请求等全方位监控,真正做到零侵入、易集成、高稳定。
1009 95
|
开发工具 Android开发 iOS开发
如何在Android Studio中配置Flutter环境?
如何在Android Studio中配置Flutter环境?
3157 160
|
11月前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
1008 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
11月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1406 6
|
数据采集 JSON 网络安全
移动端数据抓取:Android App的TLS流量解密方案
本文介绍了一种通过TLS流量解密技术抓取知乎App热榜数据的方法。利用Charles Proxy解密HTTPS流量,分析App与服务器通信内容;结合Python Requests库模拟请求,配置特定请求头以绕过反爬机制。同时使用代理IP隐藏真实IP地址,确保抓取稳定。最终成功提取热榜标题、内容简介、链接等信息,为分析热点话题和用户趋势提供数据支持。此方法也可应用于其他Android App的数据采集,但需注意选择可靠的代理服务。
728 11
移动端数据抓取:Android App的TLS流量解密方案
|
安全 算法 小程序
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
1117 28
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
667 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
788 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10785 2
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
697 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈

热门文章

最新文章