Flutter 混合开发 - aar打包

背景

项目接入 Flutter 后有两种方式,一种是 module 引入开发,一种是 aar 依赖开发。当前项目中在 Debug 阶段为了方便调试采用 module 开发,在发版时(即 Release 阶段)采用 aar 依赖引入。为了配合这种模式就需要在 release 阶段将 aar 上传至公司 maven 仓库中,但目前 Flutter 仅提供本地发布,所以下面基于官方脚本修改,实现上传至公司 maven。

打包脚本

修改自: Flutter 仓库中的 aar_init_script.gradle。路径 ->flutter/packages/flutter_tools/gradle/aar_init_script.gradle


import java.nio.file.Paths
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.publish.maven.MavenPublicationvoid configureProject(Project project, String outputDir) {if (!project.hasProperty("android")) {throw new GradleException("Android property not found.")}if (!project.android.hasProperty("libraryVariants")) {throw new GradleException("Can't generate AAR on a non Android library project.");}project.version = project.version.replace("-SNAPSHOT", "")if (project.hasProperty("buildNumber")) {project.version = project.property("buildNumber")}project.components.forEach { component ->if (component.name == "release") {println ("component = " + component.name )addAarTask(project, component)}}project.publishing {repositories {// 在这里设置为自己的 maven 参考地址 !!!maven {url = uri("file://${outputDir}/outputs/repo")}}}if (!project.property("is-plugin").toBoolean()) {return}String storageUrl = System.getenv('FLUTTER_STORAGE_BASE_URL') ?: "https://storage.googleapis.com"project.repositories {maven {url "$storageUrl/download.flutter.io"}}String engineVersion = Paths.get(getFlutterRoot(project), "bin", "internal", "engine.version").toFile().text.trim()project.dependencies {compileOnly ("io.flutter:flutter_embedding_release:1.0.0-$engineVersion") {transitive = false}}
}void configurePlugin(Project project, String outputDir) {if (!project.hasProperty("android")) {return}configureProject(project, outputDir)
}void addAarTask(Project project, component) {String variantName = component.name.capitalize()String taskName = "assembleAar$variantName"project.tasks.create(name: taskName) {if (!project.gradle.startParameter.taskNames.contains(taskName)) {return}project.publishing.publications.create(component.name, MavenPublication) { pub ->groupId = "${pub.groupId}"artifactId = "${pub.artifactId}_${pub.name}"version = "${pub.version}"from component}finalizedBy "publish"}
}allprojects {apply plugin: "maven-publish"
}projectsEvaluated {Project moduleProject = rootProject.subprojects.find { it.name == "flutter" }assert moduleProject != nullassert moduleProject.hasProperty("output-dir")//打包dart代码configureProject(moduleProject, moduleProject.property("output-dir"))//打包三方依赖Set<Project> modulePlugins = rootProject.subprojects.findAll {it.name != "flutter" && it.name != "app"}modulePlugins.each { pluginProject ->configurePlugin(pluginProject, moduleProject.property("output-dir"))moduleProject.android.libraryVariants.all { variant ->String variantName = variant.name.capitalize()if (variantName == "release"){println ("moduleProject = " + moduleProject.name + " & variantName = " + variantName + " & pluginProject = " + pluginProject.name)Task moduleAssembleAarTask = moduleProject.tasks.findByPath("assembleAar$variantName")Task pluginAssembleAarTask = pluginProject.tasks.findByPath("assembleAar$variantName")if (moduleAssembleAarTask != null && pluginAssembleAarTask != null ){moduleAssembleAarTask.dependsOn(pluginAssembleAarTask)}}}}
}

打包指令


# 根据需要修改 “VERSION”(即 aar 版本号)
./gradlew -I="$PROJECT_PATH"/publishAar.gradle -Pflutter-root="${HOME}"/flutter -Poutput-dir="$PROJECT_PATH"/build/host -Pis-plugin=false -PbuildNumber="$VERSION" --full-stacktrace --info -Pverbose=true -Ptarget=lib/main.dart -Pdart-obfuscation=false -Ptrack-widget-creation=true -Ptree-shake-icons=false -Ptarget-platform=android-arm64 assembleAarRelease




Hi,我是“青杉”,您可以通过如下方式关注我:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/322814.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2023年度技术盘点】「年终盘点后端系列」探索服务架构体系的技术风向,构建微服务核心能力(升级版)

探索服务架构体系的技术风向&#xff0c;构建微服务核心能力 文章导航大纲前提背景架构未来的风向云原生化的微服务架构&#xff08;未来软件架构&#xff09;历史历代服务架构路径新时代架构预测服务架构方向—云原生化微服务云原生化微服务提升了哪些方面 云原生化微服务架构…

XV4001BC (数字输出) 车载用

XV4001BC、XV4001BD、XV4001KC和XV4001KD是车载用SPI/I2C输出接口&#xff0c;支持角速度输出、温度传感器输出以及20度倾斜实现。这些接口可适应各种汽车导航和通讯系统&#xff0c;符合AEC-Q200标准 SPI / I2C 输出接口角速度输出(16bit)、温度传感器输出(11bit)20度倾斜实现…

OpenAI ChatGPT-4开发笔记2024-04:Chat之Tool之2:multiple functions

从程序员到ai Expert 1 设定目标2 自定义function,3个3 接口。自定义function--->ChatGPT4 define function to call ChatGPT5 发起首次请求&#xff0c;告诉gpt要做什么&#xff0c;已经有哪些函数可以调动6 大结局7 参考资料 上一篇解决了调用一个函数的问题。这一篇扩展为…

钉钉审批流程解读

组织机构 部门 部门可以创建下级部门部门可以设置部门主管&#xff0c;可以是多人部门可以默认构建&#xff0c;沟通群可以设置部门信息&#xff0c;比如电话、简介可以设置部门的可见性&#xff0c;比如隐藏本部门&#xff0c;本部门将不会在组织机构、搜索&#xff0c;个人…

Activiti7官方在线流程设计器下载和部署

文章目录 一、流程设计器下载二、流程设计器简单运行三、流程设计器简单使用四、流程设计器持久化持久化会遇到的常见错误 五、流程设计器汉化说明菜单汉化操作汉化 参考文档 一、流程设计器下载 官网下载地址&#xff1a;https://www.activiti.org/get-started 点击直接获取官…

1.1 Heterogeneous Parallel Computing

1.1 Heterogeneous Parallel Computing 前言HETEROGENEOUS PARALLEL COMPUTING 前言 基于单个中央处理器&#xff08;CPU&#xff09;的微处理器&#xff0c;如英特尔奔腾系列和AMD皓龙系列的微处理器&#xff0c;二十多年来推动了计算机应用程序的性能快速提高和成本降低。 …

Qt中图片旋转缩放操作

在我们开发过程中&#xff0c;难免会遇到加载图片的问题&#xff0c;在上一个开发项目里我就遇到了图片缩放的问题&#xff0c;所以&#xff0c;我决定将这一部分好好研究&#xff0c;记录下来&#xff0c;希望对大家有帮助哟~ 在讲解之前&#xff0c;我们先看一看具体的展示效…

运行了一晚上的经典京东面试原题

写在前面 今天在「京东」题库中翻到一道经典题。 众所周知&#xff0c;题目越经典&#xff0c;评论区越逆天。 可能是的呢 &#x1f923; 评论区常规操作 怀疑人生第一步&#xff1a;做道经典题 小白初评&#xff1f; 说归说&#xff0c;闹归闹&#xff0c;这道题还是要掌握的。…

Android studio报错误提示 Some Kotlin libraries attached to this project 问题解决方案

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 Android新建项目后&#xff0c;报以下错误 错误提示内容为&#xff1a; 这个项目附带的一…

cesium键盘控制模型

效果&#xff1a; 由于对添加模型和更新位置api进行二次了封装&#xff0c;下面提供思路 1.添加模型 const person reactive({modelTimer: null,position: {lon: 104.07274,lat: 30.57899,alt: 1200,heading: 0,pitch: 0,roll: 0,}, }); window.swpcesium.addEntity.addMo…

Linux第3步_安装Ubuntu操作系统

创建好虚拟机后&#xff0c;就可以安装Ubuntu操作系统了。 1、双击“VMware Workstation Pro”&#xff0c;得到下面的界面。 2、点击“编辑虚拟机设置”&#xff0c;见下图&#xff1a; 3、等几秒钟&#xff0c;得到下面的界面&#xff1a; 4、点击“CD/DVD”&#xff0c;得到…

Vue电商后端管理API接口测试

引言 最近有人在学习接口自动化测试时没有接口练手&#xff0c;其实接口的话&#xff0c;要么找第三方提供的&#xff0c;要么自己开发。第三方在线API需要认证&#xff0c;并且普通的话每天调用次数有一定的限制。自己开发的话&#xff0c;只要不停电&#xff0c;想怎么用就怎…