项目场景:
提示:flutter sdk 3.3.0以上
gradle 7.0 以上;
问题描述
在gradle 7.0 以上 maven 上传的脚本语法有所变化;
需要用到maven-publish; 7.0以下的maven 就不能用了;
解决方案:
aar_init_script.gradle 和 一个sh脚本, 其实也可以写个task 去执行.gradle 文件;
void configureProject(Project project) {
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.property("buildNumber")
project.android.libraryVariants.all { variant ->
if (variant.name.capitalize() == "Release"){
addAarTask(project, variant)
}
}
project.publishing {
repositories {
maven {
// url = uri("file://Users/alex/outputs/repo")
allowInsecureProtocol true
url = "http://XXXXXX:8081/repository/release";
credentials {
it.username = "XXXXX"
it.password = "XXXX"
}
}
}
}
project.components.forEach { component ->
if (component.name == "release") {
project.publishing.publications.create("release", MavenPublication) {
from component
alias false
}
}
}
}
void configurePlugin(Project project) {
if (!project.hasProperty("android")) {
// A plugin doesn't support the Android platform when this property isn't defined in the plugin.
return
}
configureProject(project)
}
String getFlutterRoot(Project project) {
if (!project.hasProperty("flutter-root")) {
throw new GradleException("The `-Pflutter-root` flag must be specified.")
}
return project.property("flutter-root")
}
void addAarTask(Project project, variant) {
String variantName = variant.name.capitalize()
String taskName = "assembleAar$variantName"
project.tasks.create(name: taskName) {
// This check is required to be able to configure the archives before `publish` runs.
if (!project.gradle.startParameter.taskNames.contains(taskName)) {
return
}
finalizedBy "publish"
}
}
allprojects {
apply plugin: "maven-publish"
}
projectsEvaluated {
Project moduleProject = rootProject.subprojects.find { it.name == "flutter" }
assert moduleProject != null
configureProject(moduleProject)
Set<Project> modulePlugins = rootProject.subprojects.findAll {
it.name != "flutter" && it.name != "app"
}
modulePlugins.each { pluginProject ->
configurePlugin(pluginProject)
}
}
#!/usr/bin/env sh
flutter pub get
#flutter pub upgrade
cd ..
./gradlew build
cd .android
./gradlew \
-I=../script/aar_init_script.gradle \
-Pis-plugin=false \
-PbuildNumber=1.0.0.170\
-Ptarget-platform=android-arm,android-arm64,android-x64 assembleAarRelease