let flutter build aar use a local engine (#39312)
This commit is contained in:
parent
9e4c3bd9ad
commit
4640690d0f
@ -549,6 +549,12 @@ Future<void> buildGradleAar({
|
|||||||
.map(getPlatformNameForAndroidArch).join(',');
|
.map(getPlatformNameForAndroidArch).join(',');
|
||||||
command.add('-Ptarget-platform=$targetPlatforms');
|
command.add('-Ptarget-platform=$targetPlatforms');
|
||||||
}
|
}
|
||||||
|
if (artifacts is LocalEngineArtifacts) {
|
||||||
|
final LocalEngineArtifacts localEngineArtifacts = artifacts;
|
||||||
|
printTrace('Using local engine: ${localEngineArtifacts.engineOutPath}');
|
||||||
|
command.add('-PlocalEngineOut=${localEngineArtifacts.engineOutPath}');
|
||||||
|
}
|
||||||
|
|
||||||
command.add(aarTask);
|
command.add(aarTask);
|
||||||
|
|
||||||
final Stopwatch sw = Stopwatch()..start();
|
final Stopwatch sw = Stopwatch()..start();
|
||||||
|
@ -3,8 +3,11 @@
|
|||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:file/memory.dart';
|
import 'package:file/memory.dart';
|
||||||
|
import 'package:flutter_tools/src/android/android_sdk.dart';
|
||||||
|
import 'package:flutter_tools/src/android/android_studio.dart';
|
||||||
import 'package:flutter_tools/src/android/gradle.dart';
|
import 'package:flutter_tools/src/android/gradle.dart';
|
||||||
import 'package:flutter_tools/src/base/logger.dart';
|
import 'package:flutter_tools/src/base/logger.dart';
|
||||||
import 'package:flutter_tools/src/artifacts.dart';
|
import 'package:flutter_tools/src/artifacts.dart';
|
||||||
@ -20,6 +23,7 @@ import 'package:process/process.dart';
|
|||||||
|
|
||||||
import '../../src/common.dart';
|
import '../../src/common.dart';
|
||||||
import '../../src/context.dart';
|
import '../../src/context.dart';
|
||||||
|
import '../../src/mocks.dart';
|
||||||
import '../../src/pubspec_schema.dart';
|
import '../../src/pubspec_schema.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
@ -843,6 +847,92 @@ flutter:
|
|||||||
throwsA(predicate<Exception>((Exception e) => e is ToolExit)));
|
throwsA(predicate<Exception>((Exception e) => e is ToolExit)));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
group('gradle build', () {
|
||||||
|
MockAndroidSdk mockAndroidSdk;
|
||||||
|
MockAndroidStudio mockAndroidStudio;
|
||||||
|
MockLocalEngineArtifacts mockArtifacts;
|
||||||
|
MockProcessManager mockProcessManager;
|
||||||
|
FakePlatform android;
|
||||||
|
FileSystem fs;
|
||||||
|
|
||||||
|
setUp(() {
|
||||||
|
fs = MemoryFileSystem();
|
||||||
|
mockAndroidSdk = MockAndroidSdk();
|
||||||
|
mockAndroidStudio = MockAndroidStudio();
|
||||||
|
mockArtifacts = MockLocalEngineArtifacts();
|
||||||
|
mockProcessManager = MockProcessManager();
|
||||||
|
android = fakePlatform('android');
|
||||||
|
});
|
||||||
|
|
||||||
|
testUsingContext('build aar uses selected local engine', () async {
|
||||||
|
when(mockArtifacts.getArtifactPath(Artifact.flutterFramework,
|
||||||
|
platform: TargetPlatform.android_arm, mode: anyNamed('mode'))).thenReturn('engine');
|
||||||
|
when(mockArtifacts.engineOutPath).thenReturn(fs.path.join('out', 'android_arm'));
|
||||||
|
|
||||||
|
final File manifestFile = fs.file('path/to/project/pubspec.yaml');
|
||||||
|
manifestFile.createSync(recursive: true);
|
||||||
|
manifestFile.writeAsStringSync('''
|
||||||
|
name: test
|
||||||
|
version: 1.0.0+1
|
||||||
|
dependencies:
|
||||||
|
flutter:
|
||||||
|
sdk: flutter
|
||||||
|
flutter:
|
||||||
|
module:
|
||||||
|
androidX: false
|
||||||
|
androidPackage: com.example.test
|
||||||
|
iosBundleIdentifier: com.example.test
|
||||||
|
'''
|
||||||
|
);
|
||||||
|
|
||||||
|
final File gradlew = fs.file('path/to/project/.android/gradlew');
|
||||||
|
gradlew.createSync(recursive: true);
|
||||||
|
|
||||||
|
when(mockProcessManager.run(
|
||||||
|
<String> ['/path/to/project/.android/gradlew', '-v'],
|
||||||
|
workingDirectory: anyNamed('workingDirectory'),
|
||||||
|
environment: anyNamed('environment'),
|
||||||
|
)).thenAnswer(
|
||||||
|
(_) async => ProcessResult(1, 0, '5.1.1', ''),
|
||||||
|
);
|
||||||
|
|
||||||
|
// write schemaData otherwise pubspec.yaml file can't be loaded
|
||||||
|
writeEmptySchemaFile(fs);
|
||||||
|
fs.currentDirectory = 'path/to/project';
|
||||||
|
|
||||||
|
// Let any process start. Assert after.
|
||||||
|
when(mockProcessManager.start(
|
||||||
|
any,
|
||||||
|
environment: anyNamed('environment'),
|
||||||
|
workingDirectory: anyNamed('workingDirectory'))
|
||||||
|
).thenAnswer((Invocation invocation) => Future<Process>.value(MockProcess()));
|
||||||
|
fs.directory('build/outputs/repo').createSync(recursive: true);
|
||||||
|
|
||||||
|
await buildGradleAar(
|
||||||
|
androidBuildInfo: const AndroidBuildInfo(BuildInfo(BuildMode.release, null)),
|
||||||
|
project: FlutterProject.current(),
|
||||||
|
outputDir: 'build/',
|
||||||
|
target: ''
|
||||||
|
);
|
||||||
|
|
||||||
|
final List<String> actualGradlewCall = verify(mockProcessManager.start(
|
||||||
|
captureAny,
|
||||||
|
environment: anyNamed('environment'),
|
||||||
|
workingDirectory: anyNamed('workingDirectory')),
|
||||||
|
).captured.single;
|
||||||
|
|
||||||
|
expect(actualGradlewCall, contains('/path/to/project/.android/gradlew'));
|
||||||
|
expect(actualGradlewCall, contains('-PlocalEngineOut=out/android_arm'));
|
||||||
|
}, overrides: <Type, Generator>{
|
||||||
|
AndroidSdk: () => mockAndroidSdk,
|
||||||
|
AndroidStudio: () => mockAndroidStudio,
|
||||||
|
Artifacts: () => mockArtifacts,
|
||||||
|
ProcessManager: () => mockProcessManager,
|
||||||
|
Platform: () => android,
|
||||||
|
FileSystem: () => fs,
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generates a fake app bundle at the location [directoryName]/[fileName].
|
/// Generates a fake app bundle at the location [directoryName]/[fileName].
|
||||||
@ -864,3 +954,5 @@ class MockLocalEngineArtifacts extends Mock implements LocalEngineArtifacts {}
|
|||||||
class MockProcessManager extends Mock implements ProcessManager {}
|
class MockProcessManager extends Mock implements ProcessManager {}
|
||||||
class MockXcodeProjectInterpreter extends Mock implements XcodeProjectInterpreter {}
|
class MockXcodeProjectInterpreter extends Mock implements XcodeProjectInterpreter {}
|
||||||
class MockGradleProject extends Mock implements GradleProject {}
|
class MockGradleProject extends Mock implements GradleProject {}
|
||||||
|
class MockitoAndroidSdk extends Mock implements AndroidSdk {}
|
||||||
|
class MockAndroidStudio extends Mock implements AndroidStudio {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user