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

国通快速免费建站跨平台软件开发工具

国通快速免费建站,跨平台软件开发工具,江苏建站速度忿,联合建设官方网站Public Artifact 支持的组件输出、输入类型 FILE:文件DIRECTORY:目录 SingleArtifact 支持的转换类型:(列举几个常用的) APK:安装包路径MERGED_MANIFEST:Manifest 文件OBFUSCATION_MAPPING…

在这里插入图片描述

Public Artifact

支持的组件输出、输入类型

  • FILE:文件
  • DIRECTORY:目录

SingleArtifact

支持的转换类型:(列举几个常用的)

  • APK:安装包路径
  • MERGED_MANIFEST:Manifest 文件
  • OBFUSCATION_MAPPING_FILE:mapping.txt 文件
  • AAR:aar 包
  • ASSETS:assets 文件
  • MERGED_NATIVE_LIBS:so 库文件

1. 立刻终止构建

AGP7+

之前我是这样直接抛出异常,还是比较快终止构建,到 AGP8 之后发现不行了,默认开启即使抛出异常也会继续执行剩下的 Task

class ExceptionHelper {companion object {@JvmStaticfun throwExecution(msg: String) {throw GradleException(msg)System.exit(-1)}}
}

AGP8+

可以在插件初始化时设置

//抛出异常时立刻停止构建,其实 AGP 低版本也有这个
project.gradle.startParameter.isContinueOnFailure = false

在这里插入图片描述

2. Manifest 合并

AGP+7

  • 获取所有 Task project.tasks.findAll().iterator()
  • 遍历、判断 Task name,拿到特定任务(如 processReleaseManifest、mergeReleaseAssets)
  • 为特定 Task 添加前后执行逻辑(设置 doFirst 、doLast)
project.afterEvaluate {expendTask()
}private List expendTask() {Iterator<Task> eIterator = project.tasks.findAll().iterator()while (eIterator.hasNext()) {Task theTask = eIterator.next()switch (CommUtils.judgeTaskType(theTask.name)) {case TaskType.TASK_PROCESS_RELEASE_MANIFEST:theTask.doLast {}break}}
}

AGP8+

  • 指定输入:@get:InputFile
  • 指定输出:@get:OutputFile(一定要输出,否则下一个 Transform 没有输入)
  • 指定 SingleArtifact:SingleArtifact.MERGED_MANIFEST
private fun registerTransform(project: Project) {val androidExt = project.extensions.getByType(AndroidComponentsExtension::class.java)androidExt.onVariants { variant ->//处理 manifest 文件val manifestUpdater = project.tasks.register(variant.name + "ManifestTransformerTask", ManifestTransformerTask::class.java) {}variant.artifacts.use(manifestUpdater).wiredWithFiles(ManifestTransformerTask::mergedManifest,ManifestTransformerTask::updatedManifest).toTransform(SingleArtifact.MERGED_MANIFEST)}
}
abstract class ManifestTransformerTask : DefaultTask() {@get:InputFile@get:PathSensitive(PathSensitivity.NONE)abstract val mergedManifest: RegularFileProperty@get:OutputFileabstract val updatedManifest: RegularFileProperty@TaskActionfun taskAction() {println("ManifestTransformerTask run")var manifest = mergedManifest.asFile.get().readText()//todo:解析 manifest  并做相应修改或查找,最后输出更新updatedManifest.get().asFile.writeText(manifest)}
}

3. Assets 合并

AGP7+

project.afterEvaluate {expendTask()
}private List expendTask() {Iterator<Task> eIterator = project.tasks.findAll().iterator()while (eIterator.hasNext()) {Task theTask = eIterator.next()switch (CommUtils.judgeTaskType(theTask.name)) {case TaskType.TASK_MERGE_RELEASE_ASSETS:theTask.doLast {}break}}
}

AGP8+

  • 指定输入:@get:inputDir
  • 指定输出:@get:outputDir(一定要输出,否则下一个 Transform 没有输入)
  • 指定 SingleArtifact:SingleArtifact.ASSETS
private fun registerTransform(project: Project) {project.plugins.withType(AppPlugin::class.java) {val appExt =project.extensions.getByType(ApplicationAndroidComponentsExtension::class.java)appExt.onVariants { variant ->//assets mergeval assetsTaskProvider =project.tasks.register(variant.name + ConstantStr.PREFIX_TRANSFORM + "AssetsTransformerTask",AssetsTransformerTask::class.java)variant.artifacts.use(assetsTaskProvider).wiredWithDirectories(AssetsTransformerTask::inputDir,AssetsTransformerTask::outputDir).toTransform(SingleArtifact.ASSETS)}}
}

注意点:

  • transform 前清空输出目录:PluginFileUtils.deleteFolder(outFileDir)
  • assets 路径变更:
    • AGP6+:build\intermediates\merged_assets
    • AGP7+、8+:build\intermediates\assets\release\mergeReleaseAssets
abstract class AssetsTransformerTask : DefaultTask() {@get:InputDirectoryabstract val inputDir: DirectoryProperty@get:OutputDirectoryabstract val outputDir: DirectoryProperty@TaskActionfun taskAction() {val outFileDir = outputDir.asFile.get()if (outFileDir.exists()) {//否则报错:文件已存在(不 clean build 目录情况下)CmdColorPrintUtils.outputYellow("重新打包前需要先清空目录:\n\t ${outFileDir.absolutePath}")PluginFileUtils.deleteFolder(outFileDir)}// We must copy the contents of the input directory to the output directory before our transformationinputDir.get().asFile.copyRecursively(outputDir.get().asFile)println("AssetsTransformerTask outputDir: ${outputDir.asFile.get().absolutePath}")outputDir.asFileTree.forEach {println("AssetsTransformerTask output =${it.absolutePath}")}}
}

如果注册了 assets Transform,那么 assets 输出目录下会有多个目录:

  • mergeReleaseAssets:系统默认名称
  • 其他自定义名称:例如我插件的 releaseDnAssetsTransformerTask

在这里插入图片描述

// 其他待完善

http://www.dtcms.com/a/430351.html

相关文章:

  • 免费网站服务器2020怎么免费注册自己的网站
  • 网站建设客户来源重庆建设工程质量信息网
  • 江西网站建设公司电话微商软件
  • 湖南网站推广多少钱网络推广专员招聘
  • 手机版网站开发教学网站转化下降原因
  • 网站制作和网页制作是不是一样it培训机构哪个好
  • 徐州建站模板公司开发区人力资源市场招聘信息
  • 做网站常用的语言互联网项目网站
  • 银川网站建设公司哪家不错邢台市路桥建设公司网站
  • wordpress怎么当站长黄骅百度贴吧招聘
  • 保险理财网站建设工商银行在线登录入口
  • 用帝国cms做企业网站版权手机wap网站免费制作
  • 网站模板怎么改ps怎么logo设计制作
  • 青岛高级网站建设价格本科学历提升
  • dhl做运单的网站注册微信
  • 做网站什么意思wordpress好用的编辑器代码
  • 做亚马逊网站的账务处理户县网站建设
  • 周口市规划建设局网站wordpress 中文版 编码
  • 青海小学网站建设网站常用的优化方法
  • 高新区手机网站建设湘潭网站建设 AA磐石网络
  • 长春市做网站推广开一个二手车销售网站怎么做
  • 佛山市禅城网站建设网页制作公司设计理念
  • 数据分析工具网站怎么加关键词做优化
  • 手机怎么免费建网站wordpress上传视频插件
  • 2017企业网站建设方案苏州网页制作服务商
  • vr网站开发安卓优化大师下载安装
  • 西湖区建设局网站营销手机网站版面
  • 免费网站建设c3sales网站维护内容
  • 最好的营销型网站织梦网站地图自动更新
  • 18款禁用网站app直播wordpress页面加载js