Allow flavors and build types when using plugins (#71738)
This commit is contained in:
parent
90f08769a3
commit
d35dd9f8a6
@ -8,6 +8,7 @@ import 'package:flutter_devicelab/framework/apk_utils.dart';
|
||||
import 'package:flutter_devicelab/framework/framework.dart';
|
||||
import 'package:flutter_devicelab/framework/task_result.dart';
|
||||
import 'package:flutter_devicelab/framework/utils.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
Future<void> main() async {
|
||||
await task(() async {
|
||||
@ -207,6 +208,35 @@ Future<void> main() async {
|
||||
await project.runGradleTask('assembleLocal');
|
||||
});
|
||||
|
||||
await runProjectTest((FlutterProject project) async {
|
||||
section('gradlew assembleLocal with plugin (custom debug build)');
|
||||
|
||||
final Directory tempDir = Directory.systemTemp.createTempSync('flutter_plugin.');
|
||||
final Directory pluginDir = Directory(path.join(tempDir.path, 'plugin_under_test'));
|
||||
|
||||
section('Create plugin');
|
||||
await inDirectory(tempDir, () async {
|
||||
await flutter(
|
||||
'create',
|
||||
options: <String>[
|
||||
'--org',
|
||||
'io.flutter.devicelab.plugin',
|
||||
'--template=plugin',
|
||||
'--platforms=android,ios',
|
||||
pluginDir.path,
|
||||
],
|
||||
);
|
||||
});
|
||||
|
||||
section('Configure');
|
||||
project.addPlugin('plugin_under_test', value: '$platformLineSep path: ${pluginDir.path}');
|
||||
await project.addCustomBuildType('local', initWith: 'debug');
|
||||
await project.getPackages();
|
||||
|
||||
section('Build APK');
|
||||
await project.runGradleTask('assembleLocal');
|
||||
});
|
||||
|
||||
await runProjectTest((FlutterProject project) async {
|
||||
section('gradlew assembleBeta (custom release build)');
|
||||
await project.addCustomBuildType('beta', initWith: 'release');
|
||||
|
@ -280,12 +280,15 @@ subprojects {
|
||||
''');
|
||||
}
|
||||
|
||||
Future<void> addPlugin(String plugin) async {
|
||||
/// Adds a plugin to the pubspec.
|
||||
/// In pubspec, each dependency is expressed as key, value pair joined by a colon `:`.
|
||||
/// such as `plugin_a`:`^0.0.1` or `plugin_a`:`\npath: /some/path`.
|
||||
Future<void> addPlugin(String plugin, { String value = '' }) async {
|
||||
final File pubspec = File(path.join(rootPath, 'pubspec.yaml'));
|
||||
String content = await pubspec.readAsString();
|
||||
content = content.replaceFirst(
|
||||
'${platformLineSep}dependencies:$platformLineSep',
|
||||
'${platformLineSep}dependencies:$platformLineSep $plugin:$platformLineSep',
|
||||
'${platformLineSep}dependencies:$platformLineSep $plugin:$value$platformLineSep',
|
||||
);
|
||||
await pubspec.writeAsString(content, flush: true);
|
||||
}
|
||||
|
@ -149,19 +149,16 @@ class FlutterPlugin implements Plugin<Project> {
|
||||
String flutterExecutableName = Os.isFamily(Os.FAMILY_WINDOWS) ? "flutter.bat" : "flutter"
|
||||
flutterExecutable = Paths.get(flutterRoot.absolutePath, "bin", flutterExecutableName).toFile();
|
||||
|
||||
// Add custom build types.
|
||||
String flutterProguardRules = Paths.get(flutterRoot.absolutePath, "packages", "flutter_tools",
|
||||
"gradle", "flutter_proguard_rules.pro")
|
||||
project.android.buildTypes {
|
||||
// Add profile build type.
|
||||
profile {
|
||||
initWith debug
|
||||
if (it.hasProperty("matchingFallbacks")) {
|
||||
matchingFallbacks = ["debug", "release"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String flutterProguardRules = Paths.get(flutterRoot.absolutePath, "packages", "flutter_tools",
|
||||
"gradle", "flutter_proguard_rules.pro")
|
||||
project.android.buildTypes {
|
||||
release {
|
||||
// Enables code shrinking, obfuscation, and optimization for only
|
||||
// your project's release build type.
|
||||
@ -315,20 +312,19 @@ class FlutterPlugin implements Plugin<Project> {
|
||||
if (!supportsBuildMode(flutterBuildMode)) {
|
||||
return
|
||||
}
|
||||
addApiDependencies(
|
||||
pluginProject,
|
||||
buildType.name,
|
||||
"io.flutter:flutter_embedding_$flutterBuildMode:$engineVersion"
|
||||
)
|
||||
// Copy build types from the app to the plugin.
|
||||
// This allows to build apps with plugins and custom build types or flavors.
|
||||
pluginProject.android.buildTypes {
|
||||
"${buildType.name}" {}
|
||||
}
|
||||
pluginProject.dependencies.add(
|
||||
"${buildType.name}CompileOnly",
|
||||
"io.flutter:flutter_embedding_$flutterBuildMode:$engineVersion")
|
||||
}
|
||||
// Wait until the Android plugin loaded.
|
||||
pluginProject.afterEvaluate {
|
||||
pluginProject.android.buildTypes {
|
||||
profile {
|
||||
initWith debug
|
||||
}
|
||||
}
|
||||
pluginProject.android.buildTypes.each addEmbeddingCompileOnlyDependency
|
||||
pluginProject.android.buildTypes.whenObjectAdded addEmbeddingCompileOnlyDependency
|
||||
project.android.buildTypes.each addEmbeddingCompileOnlyDependency
|
||||
project.android.buildTypes.whenObjectAdded addEmbeddingCompileOnlyDependency
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user