Unverified Commit dbe0ccd8 authored by Bartek Pacia's avatar Bartek Pacia Committed by GitHub

Refactor "app plugin loader" Gradle Plugin so it can be applied using the...

Refactor "app plugin loader" Gradle Plugin so it can be applied using the declarative `plugins {}` block (#127897)

This PR fixes #125009.
parent 74c66931
......@@ -7,14 +7,13 @@
// See dev/tools/bin/generate_gradle_lockfiles.dart.
buildscript {
ext.kotlin_version = '1.5.31'
ext.kotlin_version = '1.9.0'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
......
# This is a Gradle generated file for dependency locking.
# Manual edits can break the build and are not advised.
# This file is expected to be part of source control.
androidx.databinding:databinding-common:7.2.0=classpath
androidx.databinding:databinding-compiler-common:7.2.0=classpath
com.android.databinding:baseLibrary:7.2.0=classpath
com.android.tools.analytics-library:crash:30.2.0=classpath
com.android.tools.analytics-library:protos:30.2.0=classpath
com.android.tools.analytics-library:shared:30.2.0=classpath
com.android.tools.analytics-library:tracker:30.2.0=classpath
com.android.tools.build.jetifier:jetifier-core:1.0.0-beta09=classpath
com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta09=classpath
com.android.tools.build:aapt2-proto:7.2.0-7984345=classpath
com.android.tools.build:aaptcompiler:7.2.0=classpath
com.android.tools.build:apksig:7.2.0=classpath
com.android.tools.build:apkzlib:7.2.0=classpath
com.android.tools.build:builder-model:7.2.0=classpath
com.android.tools.build:builder-test-api:7.2.0=classpath
com.android.tools.build:builder:7.2.0=classpath
com.android.tools.build:bundletool:1.8.2=classpath
com.android.tools.build:gradle-api:7.2.0=classpath
com.android.tools.build:gradle:7.2.0=classpath
com.android.tools.build:manifest-merger:30.2.0=classpath
com.android.tools.build:transform-api:2.0.0-deprecated-use-gradle-api=classpath
com.android.tools.ddms:ddmlib:30.2.0=classpath
com.android.tools.layoutlib:layoutlib-api:30.2.0=classpath
com.android.tools.lint:lint-model:30.2.0=classpath
com.android.tools.lint:lint-typedef-remover:30.2.0=classpath
com.android.tools.utp:android-device-provider-ddmlib-proto:30.2.0=classpath
com.android.tools.utp:android-device-provider-gradle-proto:30.2.0=classpath
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:30.2.0=classpath
com.android.tools.utp:android-test-plugin-host-coverage-proto:30.2.0=classpath
com.android.tools.utp:android-test-plugin-host-retention-proto:30.2.0=classpath
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:30.2.0=classpath
com.android.tools:annotations:30.2.0=classpath
com.android.tools:common:30.2.0=classpath
com.android.tools:dvlib:30.2.0=classpath
com.android.tools:repository:30.2.0=classpath
com.android.tools:sdk-common:30.2.0=classpath
com.android.tools:sdklib:30.2.0=classpath
com.android:signflinger:7.2.0=classpath
com.android:zipflinger:7.2.0=classpath
com.fasterxml.jackson.core:jackson-annotations:2.11.1=classpath
com.fasterxml.jackson.core:jackson-core:2.11.1=classpath
com.fasterxml.jackson.core:jackson-databind:2.11.1=classpath
com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.11.1=classpath
com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.1=classpath
com.fasterxml.jackson.module:jackson-module-kotlin:2.11.1=classpath
com.fasterxml.woodstox:woodstox-core:6.2.1=classpath
com.github.gundy:semver4j:0.16.4=classpath
com.google.android:annotations:4.1.1.4=classpath
com.google.api.grpc:proto-google-common-protos:1.12.0=classpath
com.google.auto.value:auto-value-annotations:1.6.2=classpath
com.google.code.findbugs:jsr305:3.0.2=classpath
com.google.code.gson:gson:2.8.6=classpath
com.google.crypto.tink:tink:1.3.0-rc2=classpath
com.google.dagger:dagger:2.28.3=classpath
com.google.errorprone:error_prone_annotations:2.3.4=classpath
com.google.flatbuffers:flatbuffers-java:1.12.0=classpath
com.google.guava:failureaccess:1.0.1=classpath
com.google.guava:guava:30.1-jre=classpath
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=classpath
com.google.j2objc:j2objc-annotations:1.3=classpath
com.google.jimfs:jimfs:1.1=classpath
com.google.protobuf:protobuf-java-util:3.10.0=classpath
com.google.protobuf:protobuf-java:3.10.0=classpath
com.google.testing.platform:core-proto:0.0.8-alpha07=classpath
com.googlecode.json-simple:json-simple:1.1=classpath
com.googlecode.juniversalchardet:juniversalchardet:1.0.3=classpath
com.squareup:javapoet:1.10.0=classpath
com.squareup:javawriter:2.5.0=classpath
com.sun.activation:javax.activation:1.2.0=classpath
com.sun.istack:istack-commons-runtime:3.0.8=classpath
com.sun.xml.fastinfoset:FastInfoset:1.2.16=classpath
commons-codec:commons-codec:1.11=classpath
commons-io:commons-io:2.4=classpath
commons-logging:commons-logging:1.2=classpath
de.undercouch:gradle-download-task:4.1.1=classpath
io.grpc:grpc-api:1.21.1=classpath
io.grpc:grpc-context:1.21.1=classpath
io.grpc:grpc-core:1.21.1=classpath
io.grpc:grpc-netty:1.21.1=classpath
io.grpc:grpc-protobuf-lite:1.21.1=classpath
io.grpc:grpc-protobuf:1.21.1=classpath
io.grpc:grpc-stub:1.21.1=classpath
io.netty:netty-buffer:4.1.34.Final=classpath
io.netty:netty-codec-http2:4.1.34.Final=classpath
io.netty:netty-codec-http:4.1.34.Final=classpath
io.netty:netty-codec-socks:4.1.34.Final=classpath
io.netty:netty-codec:4.1.34.Final=classpath
io.netty:netty-common:4.1.34.Final=classpath
io.netty:netty-handler-proxy:4.1.34.Final=classpath
io.netty:netty-handler:4.1.34.Final=classpath
io.netty:netty-resolver:4.1.34.Final=classpath
io.netty:netty-transport:4.1.34.Final=classpath
io.opencensus:opencensus-api:0.21.0=classpath
io.opencensus:opencensus-contrib-grpc-metrics:0.21.0=classpath
it.unimi.dsi:fastutil:8.4.0=classpath
jakarta.activation:jakarta.activation-api:1.2.1=classpath
jakarta.xml.bind:jakarta.xml.bind-api:2.3.2=classpath
javax.inject:javax.inject:1=classpath
net.java.dev.jna:jna-platform:5.6.0=classpath
net.java.dev.jna:jna:5.6.0=classpath
net.sf.jopt-simple:jopt-simple:4.9=classpath
net.sf.kxml:kxml2:2.3.0=classpath
org.apache.commons:commons-compress:1.20=classpath
org.apache.httpcomponents:httpclient:4.5.9=classpath
org.apache.httpcomponents:httpcore:4.4.11=classpath
org.apache.httpcomponents:httpmime:4.5.6=classpath
org.bitbucket.b_c:jose4j:0.7.0=classpath
org.bouncycastle:bcpkix-jdk15on:1.56=classpath
org.bouncycastle:bcprov-jdk15on:1.56=classpath
org.checkerframework:checker-qual:3.5.0=classpath
org.codehaus.mojo:animal-sniffer-annotations:1.17=classpath
org.codehaus.woodstox:stax2-api:4.2.1=classpath
org.glassfish.jaxb:jaxb-runtime:2.3.2=classpath
org.glassfish.jaxb:txw2:2.3.2=classpath
org.jdom:jdom2:2.0.6=classpath
org.jetbrains.dokka:dokka-core:1.4.32=classpath
org.jetbrains.intellij.deps:trove4j:1.0.20181211=classpath
org.jetbrains.kotlin:kotlin-android-extensions:1.5.31=classpath
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.5.31=classpath
org.jetbrains.kotlin:kotlin-build-common:1.5.31=classpath
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.5.31=classpath
org.jetbrains.kotlin:kotlin-compiler-runner:1.5.31=classpath
org.jetbrains.kotlin:kotlin-daemon-client:1.5.31=classpath
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.5.31=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.5.31=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.5.31=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31=classpath
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.5.31=classpath
org.jetbrains.kotlin:kotlin-native-utils:1.5.31=classpath
org.jetbrains.kotlin:kotlin-project-model:1.5.31=classpath
org.jetbrains.kotlin:kotlin-reflect:1.5.31=classpath
org.jetbrains.kotlin:kotlin-scripting-common:1.5.31=classpath
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.5.31=classpath
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.5.31=classpath
org.jetbrains.kotlin:kotlin-scripting-jvm:1.5.31=classpath
org.jetbrains.kotlin:kotlin-stdlib-common:1.5.31=classpath
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.31=classpath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31=classpath
org.jetbrains.kotlin:kotlin-stdlib:1.5.31=classpath
org.jetbrains.kotlin:kotlin-tooling-metadata:1.5.31=classpath
org.jetbrains.kotlin:kotlin-util-io:1.5.31=classpath
org.jetbrains.kotlin:kotlin-util-klib:1.5.31=classpath
org.jetbrains.intellij.deps:trove4j:1.0.20200330=classpath
org.jetbrains.kotlin:kotlin-android-extensions:1.9.0=classpath
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.0=classpath
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.0=classpath
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.0=classpath
org.jetbrains.kotlin:kotlin-daemon-client:1.9.0=classpath
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.0=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.0=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.0=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.0=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.0=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.0=classpath
org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0=classpath
org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.0=classpath
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.0=classpath
org.jetbrains.kotlin:kotlin-native-utils:1.9.0=classpath
org.jetbrains.kotlin:kotlin-project-model:1.9.0=classpath
org.jetbrains.kotlin:kotlin-scripting-common:1.9.0=classpath
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.0=classpath
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.0=classpath
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.0=classpath
org.jetbrains.kotlin:kotlin-tooling-core:1.9.0=classpath
org.jetbrains.kotlin:kotlin-util-io:1.9.0=classpath
org.jetbrains.kotlin:kotlin-util-klib:1.9.0=classpath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0=classpath
org.jetbrains:annotations:13.0=classpath
org.jetbrains:markdown-jvm:0.2.1=classpath
org.jetbrains:markdown:0.2.1=classpath
org.json:json:20180813=classpath
org.jsoup:jsoup:1.13.1=classpath
org.jvnet.staxex:stax-ex:1.8.1=classpath
org.ow2.asm:asm-analysis:9.1=classpath
org.ow2.asm:asm-commons:9.1=classpath
org.ow2.asm:asm-tree:9.1=classpath
org.ow2.asm:asm-util:9.1=classpath
org.ow2.asm:asm:9.1=classpath
org.slf4j:slf4j-api:1.7.30=classpath
org.tensorflow:tensorflow-lite-metadata:0.1.0-rc2=classpath
xerces:xercesImpl:2.12.0=classpath
xml-apis:xml-apis:1.4.01=classpath
empty=
......@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-all.zip
......@@ -87,10 +87,10 @@ org.codehaus.groovy:groovy-all:2.4.15=lintClassPath
org.codehaus.mojo:animal-sniffer-annotations:1.18=lintClassPath
org.glassfish.jaxb:jaxb-runtime:2.3.1=lintClassPath
org.glassfish.jaxb:txw2:2.3.1=lintClassPath
org.jacoco:org.jacoco.agent:0.8.7=androidJacocoAnt
org.jacoco:org.jacoco.ant:0.8.7=androidJacocoAnt
org.jacoco:org.jacoco.core:0.8.7=androidJacocoAnt
org.jacoco:org.jacoco.report:0.8.7=androidJacocoAnt
org.jacoco:org.jacoco.agent:0.8.8=androidJacocoAnt
org.jacoco:org.jacoco.ant:0.8.8=androidJacocoAnt
org.jacoco:org.jacoco.core:0.8.8=androidJacocoAnt
org.jacoco:org.jacoco.report:0.8.8=androidJacocoAnt
org.jetbrains.kotlin:kotlin-reflect:1.3.72=lintClassPath
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72=lintClassPath
org.jetbrains.kotlin:kotlin-stdlib-common:1.5.31=debugAndroidTestCompileClasspath,debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,profileCompileClasspath,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
......@@ -107,12 +107,12 @@ org.jetbrains.trove4j:trove4j:20160824=lintClassPath
org.jetbrains:annotations:13.0=debugAndroidTestCompileClasspath,debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,lintClassPath,profileCompileClasspath,profileRuntimeClasspath,profileUnitTestCompileClasspath,profileUnitTestRuntimeClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath
org.jvnet.staxex:stax-ex:1.8=lintClassPath
org.ow2.asm:asm-analysis:7.0=lintClassPath
org.ow2.asm:asm-analysis:9.1=androidJacocoAnt
org.ow2.asm:asm-analysis:9.2=androidJacocoAnt
org.ow2.asm:asm-commons:7.0=lintClassPath
org.ow2.asm:asm-commons:9.1=androidJacocoAnt
org.ow2.asm:asm-commons:9.2=androidJacocoAnt
org.ow2.asm:asm-tree:7.0=lintClassPath
org.ow2.asm:asm-tree:9.1=androidJacocoAnt
org.ow2.asm:asm-tree:9.2=androidJacocoAnt
org.ow2.asm:asm-util:7.0=lintClassPath
org.ow2.asm:asm:7.0=lintClassPath
org.ow2.asm:asm:9.1=androidJacocoAnt
org.ow2.asm:asm:9.2=androidJacocoAnt
empty=androidApis,androidJdkImage,androidTestUtil,compile,coreLibraryDesugaring,debugAndroidTestAnnotationProcessorClasspath,debugAndroidTestRuntimeClasspath,debugAnnotationProcessorClasspath,debugReverseMetadataValues,debugUnitTestAnnotationProcessorClasspath,debugWearBundling,lintChecks,lintPublish,profileAnnotationProcessorClasspath,profileReverseMetadataValues,profileUnitTestAnnotationProcessorClasspath,profileWearBundling,releaseAnnotationProcessorClasspath,releaseReverseMetadataValues,releaseUnitTestAnnotationProcessorClasspath,releaseWearBundling,testCompile
......@@ -19,6 +19,12 @@ pluginManagement {
// Flutter Gradle Plugin ships together with the Flutter SDK
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
plugins {
// Flutter Gradle Plugin's ID is defined in /packages/flutter_tools/gradle/build.gradle.kts.
// We set `apply false`, because we don't want to apply the plugin to
......@@ -27,6 +33,9 @@ pluginManagement {
}
}
include ':app'
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.4.2" apply false
}
apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle"
include ':app'
......@@ -2,35 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is included from `<app>/android/settings.gradle`,
// so it can be versioned with the Flutter SDK.
// This file exists solely for the compatibility with projects that have
// not migrated to the declarative apply of the Flutter App Plugin Loader Gradle Plugin.
import groovy.json.JsonSlurper
def flutterProjectRoot = rootProject.projectDir.parentFile
// If this logic is changed, also change the logic in module_plugin_loader.gradle.
def pluginsFile = new File(flutterProjectRoot, '.flutter-plugins-dependencies')
if (!pluginsFile.exists()) {
return
}
def object = new JsonSlurper().parseText(pluginsFile.text)
assert object instanceof Map
assert object.plugins instanceof Map
assert object.plugins.android instanceof List
// Includes the Flutter plugins that support the Android platform.
object.plugins.android.each { androidPlugin ->
assert androidPlugin.name instanceof String
assert androidPlugin.path instanceof String
// Skip plugins that have no native build (such as a Dart-only implementation
// of a federated plugin).
def needsBuild = androidPlugin.containsKey('native_build') ? androidPlugin['native_build'] : true
if (!needsBuild) {
return
}
def pluginDirectory = new File(androidPlugin.path, 'android')
assert pluginDirectory.exists()
include ":${androidPlugin.name}"
project(":${androidPlugin.name}").projectDir = pluginDirectory
}
def pathToThisDirectory = buildscript.sourceFile.parentFile
apply from: "$pathToThisDirectory/src/main/groovy/app_plugin_loader.groovy"
......@@ -3,12 +3,8 @@
// found in the LICENSE file.
plugins {
`groovy-gradle-plugin`
}
repositories {
google()
mavenCentral()
`java-gradle-plugin`
`groovy`
}
......@@ -22,6 +18,10 @@ gradlePlugin {
id = "dev.flutter.flutter-gradle-plugin"
implementationClass = "FlutterPlugin"
}
create("flutterAppPluginLoaderPlugin") {
id = "dev.flutter.flutter-plugin-loader"
implementationClass = "FlutterAppPluginLoaderPlugin"
}
}
}
......
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
import groovy.json.JsonSlurper
import org.gradle.api.Plugin
import org.gradle.api.initialization.Settings
apply plugin: FlutterAppPluginLoaderPlugin
class FlutterAppPluginLoaderPlugin implements Plugin<Settings> {
// This string must match _kFlutterPluginsHasNativeBuildKey defined in
// packages/flutter_tools/lib/src/flutter_plugins.dart.
private final String nativeBuildKey = 'native_build'
@Override
void apply(Settings settings) {
def flutterProjectRoot = settings.settingsDir.parentFile
// If this logic is changed, also change the logic in module_plugin_loader.gradle.
def pluginsFile = new File(flutterProjectRoot, '.flutter-plugins-dependencies')
if (!pluginsFile.exists()) {
return
}
def object = new JsonSlurper().parseText(pluginsFile.text)
assert object instanceof Map
assert object.plugins instanceof Map
assert object.plugins.android instanceof List
// Includes the Flutter plugins that support the Android platform.
object.plugins.android.each { androidPlugin ->
assert androidPlugin.name instanceof String
assert androidPlugin.path instanceof String
// Skip plugins that have no native build (such as a Dart-only implementation
// of a federated plugin).
def needsBuild = androidPlugin.containsKey(nativeBuildKey) ? androidPlugin[nativeBuildKey] : true
if (!needsBuild) {
return
}
def pluginDirectory = new File(androidPlugin.path, 'android')
assert pluginDirectory.exists()
settings.include(":${androidPlugin.name}")
settings.project(":${androidPlugin.name}").projectDir = pluginDirectory
}
}
}
......@@ -6,7 +6,6 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:{{agpVersion}}'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
......
......@@ -6,7 +6,6 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:{{agpVersion}}'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
......
......@@ -10,11 +10,20 @@ pluginManagement {
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
plugins {
id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
}
}
include ":app"
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "{{agpVersion}}" apply false
}
apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle"
include ":app"
......@@ -36,6 +36,7 @@
"templates/app_shared/android.tmpl/app/src/main/res/values/styles.xml",
"templates/app_shared/android.tmpl/app/src/profile/AndroidManifest.xml.tmpl",
"templates/app_shared/android.tmpl/gradle.properties.tmpl",
"templates/app_shared/android.tmpl/settings.gradle.tmpl",
"templates/app_shared/android.tmpl/gradle/wrapper/gradle-wrapper.properties.tmpl",
"templates/app_shared/android.tmpl/settings.gradle",
"templates/app_shared/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment