diff --git a/.ci.yaml b/.ci.yaml index fd1a1a406a2..66a52c8bd63 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -19,7 +19,7 @@ platform_properties: {"name":"android_sdk","path":"android"}, {"name":"chrome_and_driver_96","path":"chrome"}, {"name":"flutter_sdk","path":"flutter sdk"}, - {"name":"openjdk","path":"java"}, + {"name":"openjdk_11","path":"java"}, {"name":"pub_cache","path":".pub-cache"} ] dependencies: >- @@ -37,7 +37,7 @@ platform_properties: {"name":"chrome_and_driver_96","path":"chrome"}, {"name":"flutter_sdk","path":"flutter sdk"}, {"name":"gradle","path":"gradle"}, - {"name":"openjdk","path":"java11"}, + {"name":"openjdk_11","path":"java"}, {"name":"pub_cache","path":".pub-cache"} ] dependencies: >- @@ -57,7 +57,7 @@ platform_properties: {"name":"chrome_and_driver_96","path":"chrome"}, {"name":"flutter_sdk","path":"flutter sdk"}, {"name":"gradle","path":"gradle"}, - {"name":"openjdk","path":"java11"}, + {"name":"openjdk_11","path":"java"}, {"name":"pub_cache","path":".pub-cache"} ] dependencies: >- @@ -76,7 +76,7 @@ platform_properties: {"name":"android_sdk","path":"android"}, {"name":"chrome_and_driver_96","path":"chrome"}, {"name":"flutter_sdk","path":"flutter sdk"}, - {"name":"openjdk","path":"java11"}, + {"name":"openjdk_11","path":"java"}, {"name":"osx_sdk_13a233","path":"osx_sdk"}, {"name":"pub_cache","path":".pub-cache"}, {"name":"xcode_binary","path":"xcode_binary"} @@ -96,7 +96,7 @@ platform_properties: {"name":"chrome_and_driver_96","path":"chrome"}, {"name":"flutter_sdk","path":"flutter sdk"}, {"name":"gradle","path":"gradle"}, - {"name":"openjdk","path":"java11"}, + {"name":"openjdk_11","path":"java"}, {"name":"pub_cache","path":".pub-cache"} ] dependencies: >- @@ -116,7 +116,7 @@ platform_properties: {"name":"chrome_and_driver_96","path":"chrome"}, {"name":"flutter_sdk","path":"flutter sdk"}, {"name":"gradle","path":"gradle"}, - {"name":"openjdk","path":"java11"}, + {"name":"openjdk_11","path":"java"}, {"name":"pub_cache","path":".pub-cache"}, {"name":"xcode_binary","path":"xcode_binary"}, {"name":"osx_sdk_13a233","path":"osx_sdk"} @@ -139,7 +139,7 @@ platform_properties: {"name":"android_sdk","path":"android"}, {"name":"chrome_and_driver_96","path":"chrome"}, {"name":"flutter_sdk","path":"flutter sdk"}, - {"name":"openjdk","path":"java11"}, + {"name":"openjdk_11","path":"java"}, {"name":"pub_cache","path":".pub-cache"}, {"name":"vsbuild","path":"vsbuild"} ] @@ -158,7 +158,7 @@ platform_properties: {"name":"chrome_and_driver_96","path":"chrome"}, {"name":"flutter_sdk","path":"flutter sdk"}, {"name":"gradle","path":"gradle"}, - {"name":"openjdk","path":"java11"}, + {"name":"openjdk_11","path":"java"}, {"name":"pub_cache","path":".pub-cache"} ] dependencies: >- @@ -190,13 +190,13 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ {"dependency": "android_sdk", "version": "version:31v8"}, {"dependency": "chrome_and_driver", "version": "version:96.2"}, - {"dependency": "open_jdk"} + {"dependency": "open_jdk", "version": "11"} ] tags: > ["devicelab","hostonly"] @@ -462,7 +462,7 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -485,8 +485,8 @@ targets: properties: caches: >- [ - {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "gradle", "path": "gradle"}, + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -510,7 +510,7 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -534,7 +534,7 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -558,7 +558,7 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -582,7 +582,7 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -630,7 +630,7 @@ targets: caches: >- [ {"name":"gradle", "path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -655,7 +655,7 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -680,7 +680,7 @@ targets: caches: >- [ {"name":"gradle", "path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -1551,7 +1551,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -1569,7 +1569,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -1587,7 +1587,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -1605,7 +1605,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -1623,7 +1623,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -1641,7 +1641,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -1659,7 +1659,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -1677,7 +1677,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -2276,7 +2276,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -2436,12 +2436,12 @@ targets: caches: >- [ {"name":"gradle", "path":"gradle"}, - {"name": "openjdk", "path": "java"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ {"dependency": "android_sdk", "version": "version:31v8"}, - {"dependency": "open_jdk"} + {"dependency": "open_jdk", "version": "11"} ] tags: > ["devicelab","hostonly"] @@ -2725,7 +2725,7 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -2772,7 +2772,7 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -2796,7 +2796,7 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -2822,7 +2822,7 @@ targets: caches: >- [ {"name":"gradle", "path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -3258,7 +3258,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -3276,7 +3276,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -3294,7 +3294,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci @@ -3711,13 +3711,13 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ {"dependency": "android_sdk", "version": "version:31v8"}, {"dependency": "chrome_and_driver", "version": "version:96.2"}, - {"dependency": "open_jdk"} + {"dependency": "open_jdk", "version": "11"} ] tags: > ["devicelab","hostonly"] @@ -3952,7 +3952,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] tags: > ["devicelab","hostonly"] @@ -3995,7 +3995,7 @@ targets: caches: >- [ {"name":"gradle", "path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -4020,7 +4020,7 @@ targets: caches: >- [ {"name":"gradle","path":"gradle"}, - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] dependencies: >- [ @@ -4323,7 +4323,7 @@ targets: ] caches: >- [ - {"name": "openjdk", "path": "java11"} + {"name": "openjdk_11", "path": "java"} ] scheduler: luci diff --git a/AUTHORS b/AUTHORS index 4ec4dabc1e3..a3fcb825ea6 100644 --- a/AUTHORS +++ b/AUTHORS @@ -93,3 +93,4 @@ Alberto Miola Twin Sun, LLC Taskulu LDA Jonathan Joelson +Elsabe Ros diff --git a/dev/devicelab/bin/tasks/android_obfuscate_test.dart b/dev/devicelab/bin/tasks/android_obfuscate_test.dart index 6676a0d61fc..b692161a7c1 100644 --- a/dev/devicelab/bin/tasks/android_obfuscate_test.dart +++ b/dev/devicelab/bin/tasks/android_obfuscate_test.dart @@ -51,7 +51,8 @@ Future main() async { }); }); - bool foundAarProjectName = false; + bool foundProjectNameInOldAar = false; + bool foundProjectNameInNewAar = false; await runModuleProjectTest((FlutterModuleProject flutterProject) async { section('AAR content with --obfuscate'); @@ -67,21 +68,23 @@ Future main() async { ]); }); - final String outputAarDirectory = path.join( + section('Check old _release AAR files'); + + final String oldReleaseAar = path.join( flutterProject.rootPath, 'build/host/outputs/repo/com/example/${flutterProject.name}/flutter_release/1.0/flutter_release-1.0.aar', ); - final Iterable aarFiles = await getFilesInAar(outputAarDirectory); + final Iterable filesInOldAar = await getFilesInAar(oldReleaseAar); checkCollectionContains([ ...flutterAssets, 'jni/armeabi-v7a/libapp.so', - ], aarFiles); + ], filesInOldAar); // Verify that an identifier from the Dart project code is not present // in the compiled binary. await inDirectory(flutterProject.rootPath, () async { - await exec('unzip', [outputAarDirectory]); + await exec('unzip', ['-o', oldReleaseAar]); checkFileExists(path.join(flutterProject.rootPath, 'jni/armeabi-v7a/libapp.so')); final String response = await eval( 'grep', @@ -89,16 +92,46 @@ Future main() async { canFail: true, ); if (response.trim().contains('matches')) { - foundAarProjectName = true; + foundProjectNameInOldAar = true; + } + }); + + section('Check new -release AAR files'); + + final String newReleaseAar = path.join( + flutterProject.rootPath, + 'build/host/outputs/repo/com/example/${flutterProject.name}/flutter/1.0/flutter-1.0-release.aar', + ); + final Iterable filesInNewAar = await getFilesInAar(newReleaseAar); + + checkCollectionContains([ + ...flutterAssets, + 'jni/armeabi-v7a/libapp.so', + ], filesInNewAar); + + await inDirectory(flutterProject.rootPath, () async { + await exec('unzip', ['-o', newReleaseAar]); + checkFileExists(path.join(flutterProject.rootPath, 'jni/armeabi-v7a/libapp.so')); + final String response = await eval( + 'grep', + [flutterProject.name, 'jni/armeabi-v7a/libapp.so'], + canFail: true, + ); + if (response.trim().contains('matches')) { + foundProjectNameInNewAar = true; } }); }); + if (foundApkProjectName) { return TaskResult.failure('Found project name in obfuscated APK dart library'); } - if (foundAarProjectName) { - return TaskResult.failure('Found project name in obfuscated AAR dart library'); + if (foundProjectNameInOldAar) { + return TaskResult.failure('Found project name in obfuscated AAR _release dart library'); + } + if (foundProjectNameInNewAar) { + return TaskResult.failure('Found project name in obfuscated AAR -release dart library'); } return TaskResult.success(null); diff --git a/dev/devicelab/bin/tasks/build_aar_module_test.dart b/dev/devicelab/bin/tasks/build_aar_module_test.dart index 0d47b4b05e2..ad8b9bb6308 100644 --- a/dev/devicelab/bin/tasks/build_aar_module_test.dart +++ b/dev/devicelab/bin/tasks/build_aar_module_test.dart @@ -98,7 +98,7 @@ Future main() async { 'repo', ); - section('Check release Maven artifacts'); + section('Check release Maven artifacts (old format)'); checkFileExists(path.join( repoPath, @@ -111,7 +111,7 @@ Future main() async { 'flutter_release-1.0.aar', )); - final String releasePom = path.join( + final String releasePomOld = path.join( repoPath, 'io', 'flutter', @@ -122,7 +122,7 @@ Future main() async { 'flutter_release-1.0.pom', ); - checkFileExists(releasePom); + checkFileExists(releasePomOld); checkFileExists(path.join( repoPath, @@ -146,6 +146,54 @@ Future main() async { 'plugin_with_android_release-1.0.pom', )); + section('Check release Maven artifacts (new format)'); + + checkFileExists(path.join( + repoPath, + 'io', + 'flutter', + 'devicelab', + 'hello', + 'flutter', + '1.0', + 'flutter-1.0-release.aar', + )); + + final String releasePomNew = path.join( + repoPath, + 'io', + 'flutter', + 'devicelab', + 'hello', + 'flutter', + '1.0', + 'flutter-1.0.pom', + ); + + checkFileExists(releasePomNew); + + checkFileExists(path.join( + repoPath, + 'io', + 'flutter', + 'devicelab', + 'plugin_with_android', + 'plugin_with_android', + '1.0', + 'plugin_with_android-1.0-release.aar', + )); + + checkFileExists(path.join( + repoPath, + 'io', + 'flutter', + 'devicelab', + 'plugin_with_android', + 'plugin_with_android', + '1.0', + 'plugin_with_android-1.0.pom', + )); + section('Check AOT blobs in release POM'); checkFileContains([ @@ -153,8 +201,17 @@ Future main() async { 'armeabi_v7a_release', 'arm64_v8a_release', 'x86_64_release', - 'plugin_with_android_release', - ], releasePom); + 'plugin_with_android', + '', //make sure the old pom contains the tag + ], releasePomOld); + + checkFileContains([ + 'flutter_embedding_release', + 'armeabi_v7a_release', + 'arm64_v8a_release', + 'x86_64_release', + 'plugin_with_android', + ], releasePomNew); section('Check assets in release AAR'); @@ -180,7 +237,29 @@ Future main() async { ) ); - section('Check debug Maven artifacts'); + checkCollectionContains( + [ + ...flutterAssets, + // AOT snapshots + 'jni/arm64-v8a/libapp.so', + 'jni/armeabi-v7a/libapp.so', + 'jni/x86_64/libapp.so', + ], + await getFilesInAar( + path.join( + repoPath, + 'io', + 'flutter', + 'devicelab', + 'hello', + 'flutter', + '1.0', + 'flutter-1.0-release.aar', + ) + ) + ); + + section('Check debug Maven artifacts (old format)'); checkFileExists(path.join( repoPath, @@ -193,7 +272,7 @@ Future main() async { 'flutter_debug-1.0.aar', )); - final String debugPom = path.join( + final String debugPomOld = path.join( repoPath, 'io', 'flutter', @@ -204,7 +283,7 @@ Future main() async { 'flutter_debug-1.0.pom', ); - checkFileExists(debugPom); + checkFileExists(debugPomOld); checkFileExists(path.join( repoPath, @@ -228,6 +307,54 @@ Future main() async { 'plugin_with_android_debug-1.0.pom', )); + section('Check debug Maven artifacts (new format)'); + + checkFileExists(path.join( + repoPath, + 'io', + 'flutter', + 'devicelab', + 'hello', + 'flutter', + '1.0', + 'flutter-1.0-debug.aar', + )); + + final String debugPomNew = path.join( + repoPath, + 'io', + 'flutter', + 'devicelab', + 'hello', + 'flutter', + '1.0', + 'flutter-1.0.pom', + ); + + checkFileExists(debugPomNew); + + checkFileExists(path.join( + repoPath, + 'io', + 'flutter', + 'devicelab', + 'plugin_with_android', + 'plugin_with_android', + '1.0', + 'plugin_with_android-1.0-debug.aar', + )); + + checkFileExists(path.join( + repoPath, + 'io', + 'flutter', + 'devicelab', + 'plugin_with_android', + 'plugin_with_android', + '1.0', + 'plugin_with_android-1.0.pom', + )); + section('Check AOT blobs in debug POM'); checkFileContains([ @@ -236,8 +363,18 @@ Future main() async { 'x86_64_debug', 'armeabi_v7a_debug', 'arm64_v8a_debug', - 'plugin_with_android_debug', - ], debugPom); + 'plugin_with_android', + '', //make sure the old pom contains the tag + ], debugPomOld); + + checkFileContains([ + 'flutter_embedding_debug', + 'x86_debug', + 'x86_64_debug', + 'armeabi_v7a_debug', + 'arm64_v8a_debug', + 'plugin_with_android', + ], debugPomNew); section('Check assets in debug AAR'); @@ -252,11 +389,27 @@ Future main() async { 'flutter_debug-1.0.aar', )); + final Iterable debugAarNew = await getFilesInAar(path.join( + repoPath, + 'io', + 'flutter', + 'devicelab', + 'hello', + 'flutter', + '1.0', + 'flutter-1.0-debug.aar', + )); + checkCollectionContains([ ...flutterAssets, ...debugAssets, ], debugAar); + checkCollectionContains([ + ...flutterAssets, + ...debugAssets, + ], debugAarNew); + return TaskResult.success(null); } on TaskResult catch (taskResult) { return taskResult; diff --git a/packages/flutter_tools/gradle/aar_init_script.gradle b/packages/flutter_tools/gradle/aar_init_script.gradle index e133e45c431..c4bf0655d34 100644 --- a/packages/flutter_tools/gradle/aar_init_script.gradle +++ b/packages/flutter_tools/gradle/aar_init_script.gradle @@ -6,9 +6,7 @@ import java.nio.file.Paths import org.gradle.api.Project import org.gradle.api.artifacts.Configuration -import org.gradle.api.artifacts.maven.MavenDeployer -import org.gradle.api.plugins.MavenPlugin -import org.gradle.api.tasks.Upload +import org.gradle.api.publish.maven.MavenPublication void configureProject(Project project, String outputDir) { if (!project.hasProperty("android")) { @@ -18,8 +16,6 @@ void configureProject(Project project, String outputDir) { throw new GradleException("Can't generate AAR on a non Android library project."); } - project.apply plugin: "maven" - // 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 @@ -34,13 +30,51 @@ void configureProject(Project project, String outputDir) { addAarTask(project, variant) } - project.uploadArchives { + project.publishing { repositories { - mavenDeployer { - repository(url: "file://${outputDir}/outputs/repo") + maven { + url = uri("file://${outputDir}/outputs/repo") } } } + + // 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 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 } @@ -84,55 +118,21 @@ 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 `uploadArchives` runs. + // This check is required to be able to configure the archives before `publish` runs. if (!project.gradle.startParameter.taskNames.contains(taskName)) { return } - project.uploadArchives.repositories.mavenDeployer { - pom { - artifactId = "${project.name}_${variant.name.toLowerCase()}" - } - } - overrideDefaultPublishConfig(project, variant) // Generate the Maven artifacts. - finalizedBy "uploadArchives" + finalizedBy "publish" } } -// This method mimics the logic in AGP when `android.defaultPublishConfig` is set in `build.gradle`: -// https://android.googlesource.com/platform/tools/base/+/studio-master-dev/build-system/gradle-core/src/main/java/com/android/build/gradle/internal/variant/VariantHelper.java -// -// Unfortunately, `android.defaultPublishConfig` cannot be overridden at this point since -// AGP already run this code. -void overrideDefaultPublishConfig(Project project, variant) { - String variantName = variant.name.capitalize() - Task bundle = project.tasks.findByName("bundle${variantName}Aar") // gradle:3.2.0 - if (bundle == null) { - bundle = project.tasks.findByName("bundle${variantName}") // gradle:3.1.0 - } - if (bundle == null) { - throw new GradleException("Can't generate AAR for variant ${variantName}."); - } - // Clear the current archive artifacts since the artifacts are based on `android.defaultPublishConfig`. - project.configurations["archives"].artifacts.clear() - // Add the artifact that will be published. - project.artifacts.add("archives", bundle) +// 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` - def scopeMappings = project.uploadArchives.repositories.mavenDeployer.pom.scopeMappings - // Clear the scope mappings added by AGP since they are based on the current `android.defaultPublishConfig`. - scopeMappings.mappings.clear() - // Add the new mappings. - for (Configuration configuration : flattenConfiguration(variant.runtimeConfiguration)) { - scopeMappings.addMapping(/* priority = */ 300, configuration, "compile") - } -} - -Set flattenConfiguration(Configuration configuration) { - Set configs = [configuration] - for (Configuration extend : configuration.extendsFrom) { - configs.addAll(flattenConfiguration(extend)) - } - return configs +allprojects { + apply plugin: "maven-publish" } projectsEvaluated { diff --git a/packages/flutter_tools/lib/src/android/gradle.dart b/packages/flutter_tools/lib/src/android/gradle.dart index 58276f143f6..19948c57b63 100644 --- a/packages/flutter_tools/lib/src/android/gradle.dart +++ b/packages/flutter_tools/lib/src/android/gradle.dart @@ -726,7 +726,7 @@ void printHowToConsumeAar({ for (final String buildMode in buildModes) { logger.printStatus(""" - ${buildMode}Implementation '$androidPackage:flutter_$buildMode:$buildNumber'"""); + ${buildMode}Implementation '$androidPackage:flutter:$buildNumber:$buildMode'"""); } logger.printStatus(''' diff --git a/packages/flutter_tools/lib/src/android/gradle_utils.dart b/packages/flutter_tools/lib/src/android/gradle_utils.dart index 4859fb6710b..2204ee4f6e8 100644 --- a/packages/flutter_tools/lib/src/android/gradle_utils.dart +++ b/packages/flutter_tools/lib/src/android/gradle_utils.dart @@ -29,8 +29,7 @@ import 'android_sdk.dart'; // https://kotlinlang.org/docs/gradle.html#plugin-and-versions const String templateDefaultGradleVersion = '7.4'; const String templateAndroidGradlePluginVersion = '7.1.2'; -// TODO(egarciad): Gradle 7 breaks AARs builds: https://github.com/flutter/flutter/issues/101083 -const String templateDefaultGradleVersionForModule = '4.1.0'; +const String templateDefaultGradleVersionForModule = '7.1.2'; const String templateKotlinGradlePluginVersion = '1.6.10'; // These versions should match the values in flutter.gradle (FlutterExtension). diff --git a/packages/flutter_tools/test/general.shard/android/gradle_test.dart b/packages/flutter_tools/test/general.shard/android/gradle_test.dart index 034421ad06d..75b1e6cb083 100644 --- a/packages/flutter_tools/test/general.shard/android/gradle_test.dart +++ b/packages/flutter_tools/test/general.shard/android/gradle_test.dart @@ -543,9 +543,9 @@ flutter: ' 3. Make the host app depend on the Flutter module:\n' '\n' ' dependencies {\n' - " releaseImplementation 'com.mycompany:flutter_release:2.2'\n" - " debugImplementation 'com.mycompany:flutter_debug:2.2'\n" - " profileImplementation 'com.mycompany:flutter_profile:2.2'\n" + " releaseImplementation 'com.mycompany:flutter:2.2:release'\n" + " debugImplementation 'com.mycompany:flutter:2.2:debug'\n" + " profileImplementation 'com.mycompany:flutter:2.2:profile'\n" ' }\n' '\n' '\n' @@ -594,7 +594,7 @@ flutter: ' 3. Make the host app depend on the Flutter module:\n' '\n' ' dependencies {\n' - " releaseImplementation 'com.mycompany:flutter_release:1.0'\n" + " releaseImplementation 'com.mycompany:flutter:1.0:release'\n" ' }\n' '\n' 'To learn more, visit https://flutter.dev/go/build-aar\n' @@ -632,7 +632,7 @@ flutter: ' 3. Make the host app depend on the Flutter module:\n' '\n' ' dependencies {\n' - " debugImplementation 'com.mycompany:flutter_debug:1.0'\n" + " debugImplementation 'com.mycompany:flutter:1.0:debug'\n" ' }\n' '\n' 'To learn more, visit https://flutter.dev/go/build-aar\n' @@ -671,7 +671,7 @@ flutter: ' 3. Make the host app depend on the Flutter module:\n' '\n' ' dependencies {\n' - " profileImplementation 'com.mycompany:flutter_profile:1.0'\n" + " profileImplementation 'com.mycompany:flutter:1.0:profile'\n" ' }\n' '\n' '\n'