Flutter上传Maven

flutter aar 上传 Maven

通过脚本支持了 Jenkins 上自动打包 Flutter,上传 Maven,修改版本号,一键自动化打包。

上传 Maven

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
diff --git a/packages/flutter_tools/gradle/aar_init_script.gradle b/packages/flutter_tools/gradle/aar_init_script.gradle
index cc2bbe6f98..242ac61fb0 100644
--- a/packages/flutter_tools/gradle/aar_init_script.gradle
+++ b/packages/flutter_tools/gradle/aar_init_script.gradle
@@ -37,7 +37,10 @@ void configureProject(Project project, String outputDir) {
     project.uploadArchives {
         repositories {
             mavenDeployer {
-                repository(url: "file://${outputDir}/outputs/repo")
+                //repository(url: "file://${outputDir}/outputs/repo")
+                repository(url: "http://10.2.0.210:8081/repository/maven-releases/") {
+                    authentication(userName: "a", password: "b")
+                }
             }
         }
     }

https://stackoverflow.com/questions/62284466/how-to-build-and-maven-publish-a-flutter-aar

自定义环境修改源码

要不然编译不过Flutter 238行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
project. android. buildTypes {
// Add profile build type.
profile {
initWith debug
if (it.hasProperty ("matchingFallbacks")) {
matchingFallbacks \= \["debug", "release"\]
}
}
envTest {
initWith debug
}
pre {
initWith debug
}

jinkens上传脚本

在根 build. gradle

1
2
3
apply from: 'buildscript/update_module_properties.gradle'  

buildscript {}

update_module_properties. gradle
获取 jinken 构建号当做 Flutter 版本号,然后 build aar,上面的 aar_init_script 会上传到 Maven,Flutter 上传完后 cd 到项目的目录下,修改对应的依赖的 Flutter 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
task update_module_version {
doLast {
println '执行 update_module_version task'
def BUILD_NUMBER = System.getenv('BUILD_NUMBER')
// BUILD_NUMBER = "56"
def array1 = BUILD_NUMBER.toCharArray()
StringBuilder flutterVersion = new StringBuilder()
for (int i = 0; i < array1.length; i++) {
if (i != array1.length - 1) {
flutterVersion.append(array1[i].toString() + '.')
} else {
flutterVersion.append(array1[i])
}
}
println 'flutterVersion :' + flutterVersion.toString()

exec {
workingDir
commandLine 'sh', '-c', "echo flutter uploading..."
commandLine 'sh', '-c', 'flutter pub get'
commandLine 'sh', '-c', "flutter build aar --build-number ${flutterVersion.toString()} --no-debug --no-profile"
}

// return

def branch = System.getenv('PROPERTIES_BRANCH')//配置仓库分支

def moduleName = System.getenv("moduleName")
if (moduleName == null) {
moduleName = System.getenv("JOB_BASE_NAME")
}
def aarVersion = System.getenv("BUILD_VERSION")
if (System.getenv('isUserBuildVersion') == false || System.getenv('isUserBuildVersion') == 'false') {
aarVersion = System.getProperty("buildVersion")
}
def dirpath = rootDir.parentFile.path + '/bookproperties/'
def workingDir = new File(dirpath)
def local_branch = branch
def origin_branch = "origin/" + branch
println "pwd".execute(null, workingDir).text
def command = "git branch"
def proc = command.execute()
proc.waitFor()
if (proc.exitValue() == 0) {
def branches= proc.in.text
println "当前所在分支:$branches"
}
println "git checkout -b $local_branch $origin_branch".execute(null, workingDir).errorStream.text
println "git checkout $local_branch ".execute(null, workingDir).errorStream.text
println "git pull".execute(null, workingDir).errorStream.text
println " end pull ----------------"

def filepath = rootDir.parentFile.path + '/bookproperties/bookproperties/modules.gradle'
def file = new File(filepath)
def text = file.getText()

int currentmodle = -1

def originalText = ""
StringBuilder newText = new StringBuilder()
text.eachLine {
if (it.contains('business_configure') || it.contains('business_base_configure') || it.contains('xeslibraries_configure') || it.contains('thirdlibraries_configure')) {
currentmodle++
}
//flutteraar :'com.example.app_ta_flutter:flutter_release:1.0@aar',
if (it.contains('flutteraar')) {
originalText = it
String[] splits = it.split(":")
if (splits.length >= 2) {
for (final def content in splits) {
if (content.contains("@")) {
String[] splits1 = content.split("@")
splits1[0] = flutterVersion.toString()
newText.append(splits1[0] + "@")
newText.append(splits1[1])
} else {
newText.append(content + ":")
}
}
}
println "需要替换的aar的包名为:" + it
}
}
if (text.contains(originalText)) { //将flutter那一行替换了
text = text.replaceAll(originalText, newText.toString())
}
StringBuffer buffer = new StringBuffer()
buffer.append(text)
println("新的moudles---" + buffer.toString())
file.write(buffer.toString())

def subVcode = System.getenv('BUILD_TAG')
println "git add . ".execute(null, workingDir).errorStream.text
println "git commit -m 'updateversion--${subVcode}' ".execute(null, workingDir).errorStream.text
println "git push ".execute(null, workingDir).errorStream.text
}

}

原生的依赖

1
2
3
4
flutteraar:'com.bundle:flutter_release:3.5@aar',
flutterv7:'io.flutter:armeabi_v7a_release:1.0.0-e85ea0e79c6d894c120cda4ee8ee10fe6745e187',
flutterembedding:'io.flutter:flutter_embedding_release:1.0.0-e85ea0e79c6d894c120cda4ee8ee10fe6745e187',
flutterv8:'io.flutter:arm64_v8a_release:1.0.0-e85ea0e79c6d894c120cda4ee8ee10fe6745e187',
  1. flutteraar: 这是 Flutter 的 AAR(Android Archive)库文件,用于在 Android 项目中引入 Flutter 框架。它包含了 Flutter 运行时和相应的依赖项,允许在 Flutter 和 Android 之间进行交互和集成。
  2. flutterv7: 这是 Flutter 的 armeabi-v7a 架构下的发布版本库。Flutter 支持多种 CPU 架构,armeabi-v7a 是面向 ARM 架构的 32 位设备,这个库提供了在 armeabi-v7a 架构设备上运行 Flutter 应用所需的二进制文件。
  3. flutterembedding: 这是 Flutter 的嵌入式库,用于在原生 Android 或 iOS 项目中嵌入 Flutter 模块。它提供了与 Flutter 交互的接口和工具,允许在原生应用程序中使用 Flutter 模块来实现跨平台功能。

Flutter上传Maven
http://peiniwan.github.io/2024/04/71188474b253.html
作者
六月的雨
发布于
2024年4月6日
许可协议