-
-
Save xiejianchao/e739a4f37830c5a21b40f610080084c2 to your computer and use it in GitHub Desktop.
// This script is used to initialize the build in a module or plugin project. | |
// During this phase, the script applies the Maven plugin and configures the | |
// destination of the local repository. | |
// The local repository will contain the AAR and POM files. | |
import java.nio.file.Paths | |
import org.gradle.api.Project | |
import org.gradle.api.artifacts.Configuration | |
import org.gradle.api.publish.maven.MavenPublication | |
void configureProject(Project project, String mavenUrl, String mavenUser, String mavenPwd, String version) { | |
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."); | |
} | |
// Snapshot versions include the timestamp in the artifact name. | |
// Therefore, remove the snapshot part, so new runs of `flutter build aar` overrides existing artifacts. | |
// This version isn't relevant in Flutter since the pub version is used | |
// to resolve dependencies. | |
project.version = version | |
if (mavenUrl.startsWith("file:")) { | |
//本地路径时,原逻辑 | |
project.version = project.version.replace("-SNAPSHOT", "") | |
} | |
// if (project.hasProperty("buildNumber")) { | |
// project.version = project.property("buildNumber") | |
// } | |
project.android.libraryVariants.all { variant -> | |
addAarTask(project, variant) | |
} | |
project.publishing { | |
repositories { | |
maven { | |
url mavenUrl | |
credentials { | |
username = mavenUser | |
password = mavenPwd | |
} | |
} | |
} | |
} | |
// Some extra work to have alternative publications with the same format as the old maven plugin. | |
// Instead of using classifiers for the variants, the old maven plugin appended `_{variant}` to the artifactId | |
// First, create a default MavenPublication for each variant (except "all" since that is used to publish artifacts in the new way) | |
project.components.forEach { component -> | |
if (component.name != "all") { | |
project.publishing.publications.create(component.name, MavenPublication) { | |
from component | |
} | |
} | |
} | |
// then, rename the artifactId to include the variant and make sure to remove any classifier | |
// data tha gradle has set, as well as adding a <relocation> tag pointing to the new coordinates | |
project.publishing.publications.forEach { pub -> | |
def relocationArtifactId = pub.artifactId | |
pub.artifactId = "${relocationArtifactId}_${pub.name}" | |
pub.alias = true | |
pub.pom.distributionManagement { | |
relocation { | |
// New artifact coordinates | |
groupId = "${pub.groupId}" | |
artifactId = "${relocationArtifactId}" | |
version = "${pub.version}" | |
message = "Use classifiers rather than _variant for new publish plugin" | |
} | |
} | |
} | |
// also publish the artifacts in the new way, using one set of coordinates with classifiers | |
project.publishing.publications.create("all", MavenPublication) { | |
from project.components.all | |
alias false | |
} | |
if (!project.property("is-plugin").toBoolean()) { | |
return | |
} | |
String storageUrl = System.getenv('FLUTTER_STORAGE_BASE_URL') ?: "https://storage.googleapis.com" | |
// This is a Flutter plugin project. Plugin projects don't apply the Flutter Gradle plugin, | |
// as a result, add the dependency on the embedding. | |
project.repositories { | |
maven { | |
url "$storageUrl/download.flutter.io" | |
} | |
} | |
String engineVersion = Paths.get(getFlutterRoot(project), "bin", "internal", "engine.version") | |
.toFile().text.trim() | |
project.dependencies { | |
// Add the embedding dependency. | |
compileOnly ("io.flutter:flutter_embedding_release:1.0.0-$engineVersion") { | |
// We only need to expose io.flutter.plugin.* | |
// No need for the embedding transitive dependencies. | |
transitive = false | |
} | |
} | |
} | |
void configurePlugin(Project project, String outputDir, String mavenUser, String mavenPwd) { | |
// void configurePlugin(Project project, String outputDir) { | |
if (!project.hasProperty("android")) { | |
// A plugin doesn't support the Android platform when this property isn't defined in the plugin. | |
return | |
} | |
// configureProject(project, outputDir) | |
//flutter plugin 版本号 | |
File pubspecFile = project.file("../pubspec.yaml") | |
String versionLine = pubspecFile.readLines().find { line-> | |
line.startsWith("version:") | |
} | |
def pluginVersion = versionLine.split(":")[1].trim() | |
println("configurePlugin: " + project.toString() + " v" + pluginVersion) | |
configureProject(project, outputDir, mavenUser, mavenPwd, pluginVersion) | |
} | |
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 | |
} | |
// Generate the Maven artifacts. | |
finalizedBy "publish" | |
} | |
} | |
// maven-publish has to be applied _before_ the project gets evaluated, but some of the code in | |
// `configureProject` requires the project to be evaluated. Apply the maven plugin to all projects, but | |
// only configure it if it matches the conditions in `projectsEvaluated` | |
allprojects { | |
apply plugin: "maven-publish" | |
} | |
projectsEvaluated { | |
assert rootProject.hasProperty("is-plugin") | |
if (rootProject.property("is-plugin").toBoolean()) { | |
assert rootProject.hasProperty("maven-url") | |
// In plugin projects, the root project is the plugin. | |
// configureProject(rootProject, rootProject.property("output-dir")) | |
configureProject(rootProject, rootProject.property("maven-url"), | |
rootProject.property("maven-user"), rootProject.property("maven-pwd"), | |
project.property("buildNumber") | |
) | |
return | |
} | |
// The module project is the `:flutter` subproject. | |
Project moduleProject = rootProject.subprojects.find { it.name == "flutter" } | |
assert moduleProject != null | |
assert moduleProject.hasProperty("maven-url") | |
// configureProject(moduleProject, moduleProject.property("output-dir")) | |
configureProject(moduleProject, moduleProject.property("maven-url"), | |
moduleProject.property("maven-user"), moduleProject.property("maven-pwd"), | |
moduleProject.property("buildNumber") | |
) | |
// Gets the plugin subprojects. | |
Set<Project> modulePlugins = rootProject.subprojects.findAll { | |
it.name != "flutter" && it.name != "app" | |
} | |
// When a module is built as a Maven artifacts, plugins must also be built this way | |
// because the module POM's file will include a dependency on the plugin Maven artifact. | |
// This is due to the Android Gradle Plugin expecting all library subprojects to be published | |
// as Maven artifacts. | |
String mavenUrl = moduleProject.property("maven-url") | |
String version = moduleProject.property("buildNumber") | |
println("Version: $version") | |
println("MavenUrl: " + mavenUrl) | |
//输出 配置 | |
String buildMode = moduleProject.gradle.startParameter | |
.taskNames.find { it.startsWith("assembleAar") }.substring(11) | |
println("BuildMode: $buildMode") | |
println("================================================================================") | |
modulePlugins.each { pluginProject -> | |
// configurePlugin(pluginProject, moduleProject.property("output-dir")) | |
configurePlugin(pluginProject, mavenUrl, | |
moduleProject.property("maven-user"), moduleProject.property("maven-pwd")) | |
moduleProject.android.libraryVariants.all { variant -> | |
// Configure the `assembleAar<variantName>` task for each plugin's projects and make | |
// the module's equivalent task depend on the plugin's task. | |
String variantName = variant.name.capitalize() | |
moduleProject.tasks.findByPath("assembleAar$variantName") | |
.dependsOn(pluginProject.tasks.findByPath("assembleAar$variantName")) | |
} | |
} | |
//结束 | |
println("================================================================================") | |
} |
Hi, is this script works if i want to upload the aar into JFrog?
I don't test in JFrog, only tested in nexus and works properly, but i guess it should work, You can try it.
非常感谢你提供的脚本。让我能成功上传到了本地的nexus
非常感谢你提供的脚本。让我能成功上传到了本地的nexus
you’re welcom.
I want to upload to mavencenter, and I need to configure singing, do you know how to configure it ?
I want to upload to mavencenter, and I need to configure singing, do you know how to configure it ?
you can use and edit the following script of sh:
./gradlew
-I=../script/flutter_aar_build_upload_new.gradle
-Pmaven-url=$MAVEN_URL
-Pmaven-user=$username
-Pmaven-pwd=$password
-Pis-plugin=false
-PbuildNumber=$version
-Ptarget-platform=android-arm,android-arm64,android-x64 assembleAarRelease
flutter工程里引入了connectivity_plus这插件就上传不了,只能是纯flutter,没有原生交互的才行
flutter工程里引入了connectivity_plus这插件就上传不了,只能是纯flutter,没有原生交互的才行
使用 ^3.0.5 版本应该就可以了。
Hi, is this script works if i want to upload the aar into JFrog?