mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Ensures flutter jar is added to all build types on plugin projects (#34573)
This commit is contained in:
parent
c7408be181
commit
577c2fc48c
@ -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)
|
||||
}
|
||||
} 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"])
|
||||
}
|
||||
project.dependencies {
|
||||
String configuration;
|
||||
if (project.getConfigurations().findByName("compileOnly")) {
|
||||
configuration = "${variantName}CompileOnly";
|
||||
} else {
|
||||
configuration = "${variantName}Provided";
|
||||
}
|
||||
|
||||
add(configuration, files)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user