Commit 577c2fc4 authored by Josh Burton's avatar Josh Burton Committed by Emmanuel Garcia

Ensures flutter jar is added to all build types on plugin projects (#34573)

parent c7408be1
......@@ -164,6 +164,17 @@ Future<void> main() async {
await project.runGradleTask('assembleBeta');
});
await runProjectTest((FlutterProject project) async {
section('gradlew assembleLocal (plugin with custom build type)');
await project.addCustomBuildType('local', initWith: 'debug');
await project.addGlobalBuildType('local', initWith: 'debug');
section('Add plugin');
await project.addPlugin('path_provider');
await project.getPackages();
await project.runGradleTask('assembleLocal');
});
await runProjectTest((FlutterProject project) async {
section('gradlew assembleFreeDebug (product flavor)');
await project.addProductFlavors(<String>['free']);
......
......@@ -116,6 +116,42 @@ android {
''');
}
Future<void> addGlobalBuildType(String name, {String initWith}) async {
final File buildScript = File(
path.join(androidPath, 'build.gradle'),
);
buildScript.openWrite(mode: FileMode.append).write('''
subprojects {
afterEvaluate {
android {
buildTypes {
$name {
initWith $initWith
}
}
}
}
}
''');
}
Future<void> addPlugin(String plugin) async {
final File pubspec = File(path.join(rootPath, 'pubspec.yaml'));
String content = await pubspec.readAsString();
content = content.replaceFirst(
'\ndependencies:\n',
'\ndependencies:\n $plugin:\n',
);
await pubspec.writeAsString(content, flush: true);
}
Future<void> getPackages() async {
await inDirectory(Directory(rootPath), () async {
await flutter('pub', options: <String>['get']);
});
}
Future<void> addProductFlavors(Iterable<String> flavors) async {
final File buildScript = File(
path.join(androidPath, 'app', 'build.gradle'),
......
......@@ -223,8 +223,16 @@ class FlutterPlugin implements Plugin<Project> {
initWith debug
}
}
pluginProject.android.buildTypes.each {
def buildMode = buildModeFor(it)
addFlutterJarCompileOnlyDependency(pluginProject, it.name, project.files( flutterJar ?: baseJar[buildMode] ))
}
pluginProject.android.buildTypes.whenObjectAdded {
def buildMode = buildModeFor(it)
addFlutterJarCompileOnlyDependency(pluginProject, it.name, project.files( flutterJar ?: baseJar[buildMode] ))
}
}
pluginProject.afterEvaluate this.&addFlutterJarCompileOnlyDependency
} else {
project.logger.error("Plugin project :$name not found. Please update settings.gradle.")
}
......@@ -292,33 +300,20 @@ class FlutterPlugin implements Plugin<Project> {
return PLATFORM_ARM32;
}
// TODO(blasten): Clean this up.
private void addFlutterJarCompileOnlyDependency(Project project) {
private void addFlutterJarCompileOnlyDependency(Project project, String variantName, FileCollection files) {
if (project.state.failure) {
return
}
project.dependencies {
if (flutterJar != null) {
if (project.getConfigurations().findByName("compileOnly")) {
compileOnly project.files(flutterJar)
} else {
provided project.files(flutterJar)
}
String configuration;
if (project.getConfigurations().findByName("compileOnly")) {
configuration = "${variantName}CompileOnly";
} else {
assert baseJar["debug"].isFile()
assert baseJar["profile"].isFile()
assert baseJar["release"].isFile()
if (project.getConfigurations().findByName("debugCompileOnly")) {
debugCompileOnly project.files(baseJar["debug"])
profileCompileOnly project.files(baseJar["profile"])
releaseCompileOnly project.files(baseJar["release"])
} else {
debugProvided project.files(baseJar["debug"])
profileProvided project.files(baseJar["profile"])
releaseProvided project.files(baseJar["release"])
}
configuration = "${variantName}Provided";
}
add(configuration, files)
}
}
......
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