当前位置: 首页 > news >正文

Android-->产物收集(含apk文件重命名, aab文件重命名)

以前写过修改apk生成路径和文件名的文章, 如下:

AS–›Gradle 7.0.0/4.1.0/4.0/3.3/3.0 修改APK生成路径和文件名(附AAR修改方式以及分析过程)_com.android.build.gradle.internal.api.libraryvaria-CSDN博客

这种方法入侵了gradle,破坏了原有的gradle环境, 经常会导致如下问题的产生:

  • Error loading build artifacts from: ...app/intermediates/apk_ide_redirect_file/debug/redirect.tx
  • In plugin 'com.android.internal.version-check' type 'com.android.build.gradle.internal.tasks.ListingFileRedirectTask' property 'listingFile'
  • 'output-metadata.json' which doesn't exist.

这一次, 换一种思路实现, 以便达到相同效果.

这次通过监听assembleXXX任务(用于生成apk)和bundleXXX任务(用于生成aab), 在任务结束之后, 通过脚本复制对应的产物到指定的目录(顺便修改文件名),即可达到相同的效果.

android {tasks.whenTaskAdded { task ->tasks.create('收集产物任务') {doLast {//开始收集产物}}task.finalizedBy('收集产物任务')//挂载任务}
}

怎么设置对应的产物名称

这里通过applicationVariants拿到flavorbuildType, 将产物名称关联到这2个参数上.

android {applicationVariants.all { variant ->variant.flavorName //关键信息flavorvariant.buildType.name //关键信息buildType}    
}

使用flavorbuildType按照一定规则, 生成唯一的key, 然后把产物名称通过ext对象存储,rootProject.ext.setProperty(key, name), 方便之后在task中读取.

怎么读取设置的产物名称

Android打包时, 都有对应的打包gradle task, 这个task.name就会包含flavorbuildType信息, 只要从任务名称中分离出这2个参数, 然后和上一步对应上, 就可以取出设置好的产物文件名了.

思路大体就是上述内容, 我已封装成了在线脚本, 一键食用.

脚本支持特性

  • 支持收集apk,并支持重命名
  • 支持收集aab,并支持重命名
  • 收集mapping.txt
  • 收集usage.txt
  • 收集seeds.txt
  • 收集R.txt
  • 收集configuration.txt
  • 支持AGP 8.0+
  • 支持AGP 8.0-

使用方式

apply脚本之前, 先配置产物名称:

ext {APP_NAME = "xxx"apkName = "#an-#vn_#fn_#bn_#ka"
}//可用参数: #an:app名字APP_NAME; #vn:版本名; #d:当天日期yyyy-MM-dd; #t:当天时间yyyy-MM-dd_HH-mm; #fn:风味名; #bn:编译类型名;
//         #sn:使用的签名名称; #ka:使用的签名别名;

在工程的build.gradle中加入脚本:

国内

apply from: 'https://gitee.com/angcyo/CollectProduct/raw/master/app/collectProduct.gradle'

国外

apply from: 'https://raw.githubusercontent.com/angcyo/CollectProduct/master/app/collectProduct.gradle'

参数配置

gradle.properties文件中配置产物输出目录, 默认为根目录下的.apk文件夹:

apk_path='.apk'

群内有各(pian)种(ni)各(jin)样(qun)的大佬,等你来撩.

联系作者

点此QQ对话 该死的空格 点此快速加群

在这里插入图片描述

开源地址

http://www.lryc.cn/news/423062.html

相关文章:

  • matlab实现迷宫最佳路径规划
  • 【自用】Python爬虫学习(二):网页解析的三种方式(re、bs4、xpath)
  • 从零到一:家政保洁小程序搭建全攻略与功能作用深度解析
  • 单元测试:为工程质量保驾护航
  • 江协科技STM32学习笔记
  • RabbitMQ再回首--往事如梦
  • 头狼择校小程序
  • 【Electron】npm安装Electron项目失败报错问题和解决办法
  • 人工智能提示(prompt)工程入门
  • 【机器学习的基本思想】模型优化与评估
  • 公司电脑监控软件推荐(一口气了解8款!)一起领略电脑监控界的刀光剑影!
  • 设备图纸资料管理系统:数字化转型下的高效协同与安全管理新篇章
  • ArcGIS基础:标注转注记及简单处理
  • jQuery实现图片轮播效果
  • 关于天地图新手使用
  • STM32与Arduino和ESP32对比分析
  • 125. 验证回文串【 力扣(LeetCode) 】
  • 3年经验,面试测试岗20k都拿不到了吗?
  • 【ML】强化学习(Reinforcement Learning)及其拆解
  • 在宝塔面板下安装WordPress
  • 纷享销客CRM AI产品架构概览、产品特色
  • 【文件IO】文件系统操作
  • Spring Cloud Alibaba 集成分布式定时任务调度功能
  • 中职云计算实训室
  • 【python制作一个小程序作为七夕礼物】
  • 一篇文章教会你如何使用Haproxy,内含大量实战案例
  • PythonStudio 控件使用常用方式(二十二)TFlowPanel
  • 培训第二十七天(lvs_nat模式与lvs_dr模式配置)
  • JAVA中DateFormat详解
  • uniapp——列表选择样式