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/framework.dart';
|
||||||
import 'package:flutter_devicelab/framework/task_result.dart';
|
import 'package:flutter_devicelab/framework/task_result.dart';
|
||||||
import 'package:flutter_devicelab/framework/utils.dart';
|
import 'package:flutter_devicelab/framework/utils.dart';
|
||||||
|
import 'package:path/path.dart' as path;
|
||||||
|
|
||||||
Future<void> main() async {
|
Future<void> main() async {
|
||||||
await task(() async {
|
await task(() async {
|
||||||
@ -207,6 +208,35 @@ Future<void> main() async {
|
|||||||
await project.runGradleTask('assembleLocal');
|
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 {
|
await runProjectTest((FlutterProject project) async {
|
||||||
section('gradlew assembleBeta (custom release build)');
|
section('gradlew assembleBeta (custom release build)');
|
||||||
await project.addCustomBuildType('beta', initWith: 'release');
|
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'));
|
final File pubspec = File(path.join(rootPath, 'pubspec.yaml'));
|
||||||
String content = await pubspec.readAsString();
|
String content = await pubspec.readAsString();
|
||||||
content = content.replaceFirst(
|
content = content.replaceFirst(
|
||||||
'${platformLineSep}dependencies:$platformLineSep',
|
'${platformLineSep}dependencies:$platformLineSep',
|
||||||
'${platformLineSep}dependencies:$platformLineSep $plugin:$platformLineSep',
|
'${platformLineSep}dependencies:$platformLineSep $plugin:$value$platformLineSep',
|
||||||
);
|
);
|
||||||
await pubspec.writeAsString(content, flush: true);
|
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"
|
String flutterExecutableName = Os.isFamily(Os.FAMILY_WINDOWS) ? "flutter.bat" : "flutter"
|
||||||
flutterExecutable = Paths.get(flutterRoot.absolutePath, "bin", flutterExecutableName).toFile();
|
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 {
|
project.android.buildTypes {
|
||||||
|
// Add profile build type.
|
||||||
profile {
|
profile {
|
||||||
initWith debug
|
initWith debug
|
||||||
if (it.hasProperty("matchingFallbacks")) {
|
if (it.hasProperty("matchingFallbacks")) {
|
||||||
matchingFallbacks = ["debug", "release"]
|
matchingFallbacks = ["debug", "release"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
String flutterProguardRules = Paths.get(flutterRoot.absolutePath, "packages", "flutter_tools",
|
|
||||||
"gradle", "flutter_proguard_rules.pro")
|
|
||||||
project.android.buildTypes {
|
|
||||||
release {
|
release {
|
||||||
// Enables code shrinking, obfuscation, and optimization for only
|
// Enables code shrinking, obfuscation, and optimization for only
|
||||||
// your project's release build type.
|
// your project's release build type.
|
||||||
@ -315,20 +312,19 @@ class FlutterPlugin implements Plugin<Project> {
|
|||||||
if (!supportsBuildMode(flutterBuildMode)) {
|
if (!supportsBuildMode(flutterBuildMode)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
addApiDependencies(
|
// Copy build types from the app to the plugin.
|
||||||
pluginProject,
|
// This allows to build apps with plugins and custom build types or flavors.
|
||||||
buildType.name,
|
pluginProject.android.buildTypes {
|
||||||
"io.flutter:flutter_embedding_$flutterBuildMode:$engineVersion"
|
"${buildType.name}" {}
|
||||||
)
|
}
|
||||||
|
pluginProject.dependencies.add(
|
||||||
|
"${buildType.name}CompileOnly",
|
||||||
|
"io.flutter:flutter_embedding_$flutterBuildMode:$engineVersion")
|
||||||
}
|
}
|
||||||
|
// Wait until the Android plugin loaded.
|
||||||
pluginProject.afterEvaluate {
|
pluginProject.afterEvaluate {
|
||||||
pluginProject.android.buildTypes {
|
project.android.buildTypes.each addEmbeddingCompileOnlyDependency
|
||||||
profile {
|
project.android.buildTypes.whenObjectAdded addEmbeddingCompileOnlyDependency
|
||||||
initWith debug
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pluginProject.android.buildTypes.each addEmbeddingCompileOnlyDependency
|
|
||||||
pluginProject.android.buildTypes.whenObjectAdded addEmbeddingCompileOnlyDependency
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user