diff --git a/packages/flutter_tools/lib/src/android/gradle.dart b/packages/flutter_tools/lib/src/android/gradle.dart index c988f4b0cf5..548266557e7 100644 --- a/packages/flutter_tools/lib/src/android/gradle.dart +++ b/packages/flutter_tools/lib/src/android/gradle.dart @@ -297,6 +297,13 @@ Future buildGradleApp({ command.add('-Plocal-engine-repo=${localEngineRepo.path}'); command.add('-Plocal-engine-build-mode=${buildInfo.modeName}'); command.add('-Plocal-engine-out=${localEngineArtifacts.engineOutPath}'); + command.add('-Ptarget-platform=${_getTargetPlatformByLocalEnginePath( + localEngineArtifacts.engineOutPath)}'); + } else if (androidBuildInfo.targetArchs.isNotEmpty) { + final String targetPlatforms = androidBuildInfo + .targetArchs + .map(getPlatformNameForAndroidArch).join(','); + command.add('-Ptarget-platform=$targetPlatforms'); } if (target != null) { command.add('-Ptarget=$target'); @@ -322,12 +329,6 @@ Future buildGradleApp({ if (androidBuildInfo.shrink) { command.add('-Pshrink=true'); } - if (androidBuildInfo.targetArchs.isNotEmpty) { - final String targetPlatforms = androidBuildInfo - .targetArchs - .map(getPlatformNameForAndroidArch).join(','); - command.add('-Ptarget-platform=$targetPlatforms'); - } if (shouldBuildPluginAsAar) { // Pass a system flag instead of a project flag, so this flag can be // read from include_flutter.groovy. @@ -537,11 +538,6 @@ Future buildGradleAar({ command.add('-Ptarget=$target'); } - if (androidBuildInfo.targetArchs.isNotEmpty) { - final String targetPlatforms = androidBuildInfo.targetArchs - .map(getPlatformNameForAndroidArch).join(','); - command.add('-Ptarget-platform=$targetPlatforms'); - } if (globals.artifacts is LocalEngineArtifacts) { final LocalEngineArtifacts localEngineArtifacts = globals.artifacts as LocalEngineArtifacts; final Directory localEngineRepo = _getLocalEngineRepo( @@ -571,6 +567,12 @@ Future buildGradleAar({ 'in ${outputDirectory.path}' ); } + command.add('-Ptarget-platform=${_getTargetPlatformByLocalEnginePath( + localEngineArtifacts.engineOutPath)}'); + } else if (androidBuildInfo.targetArchs.isNotEmpty) { + final String targetPlatforms = androidBuildInfo.targetArchs + .map(getPlatformNameForAndroidArch).join(','); + command.add('-Ptarget-platform=$targetPlatforms'); } command.add(aarTask); @@ -928,7 +930,7 @@ Directory _getLocalEngineRepo({ assert(engineOutPath != null); assert(androidBuildInfo != null); - final String abi = getEnumName(androidBuildInfo.targetArchs.first); + final String abi = _getAbiByLocalEnginePath(engineOutPath); final Directory localEngineRepo = globals.fs.systemTempDirectory .createTempSync('flutter_tool_local_engine_repo.'); @@ -979,3 +981,27 @@ Directory _getLocalEngineRepo({ } return localEngineRepo; } + +String _getAbiByLocalEnginePath(String engineOutPath) { + String result = 'armeabi_v7a'; + if (engineOutPath.contains('x86')) { + result = 'x86'; + } else if (engineOutPath.contains('x64')) { + result = 'x86_64'; + } else if (engineOutPath.contains('arm64')) { + result = 'arm64_v8a'; + } + return result; +} + +String _getTargetPlatformByLocalEnginePath(String engineOutPath) { + String result = 'android-arm'; + if (engineOutPath.contains('x86')) { + result = 'android-x86'; + } else if (engineOutPath.contains('x64')) { + result = 'android-x64'; + } else if (engineOutPath.contains('arm64')) { + result = 'android-arm64'; + } + return result; +} diff --git a/packages/flutter_tools/test/general.shard/android/gradle_test.dart b/packages/flutter_tools/test/general.shard/android/gradle_test.dart index ff72d4fc3bd..bd14cb2f339 100644 --- a/packages/flutter_tools/test/general.shard/android/gradle_test.dart +++ b/packages/flutter_tools/test/general.shard/android/gradle_test.dart @@ -1662,7 +1662,7 @@ plugin1=${plugin1.path} ProcessManager: () => mockProcessManager, }); - testUsingContext('build apk uses selected local engine', () async { + testUsingContext('build apk uses selected local engine,the engine abi is arm', () async { when(mockArtifacts.getArtifactPath(Artifact.flutterFramework, platform: TargetPlatform.android_arm, mode: anyNamed('mode'))).thenReturn('engine'); when(mockArtifacts.engineOutPath).thenReturn(fileSystem.path.join('out', 'android_arm')); @@ -1754,7 +1754,286 @@ plugin1=${plugin1.path} ProcessManager: () => mockProcessManager, }); - testUsingContext('build aar uses selected local engine', () async { + testUsingContext( + 'build apk uses selected local engine,the engine abi is arm64', () async { + when(mockArtifacts.getArtifactPath(Artifact.flutterFramework, + platform: anyNamed('platform'), mode: anyNamed('mode'))).thenReturn('engine'); + when(mockArtifacts.engineOutPath).thenReturn(fileSystem.path.join('out', 'android_arm64')); + + fileSystem.file('out/android_arm64/flutter_embedding_release.pom') + ..createSync(recursive: true) + ..writeAsStringSync(''' + + + 1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b + + + +'''); + fileSystem.file('out/android_arm64/arm64_v8a_release.pom').createSync(recursive: true); + fileSystem.file('out/android_arm64/arm64_v8a_release.jar').createSync(recursive: true); + fileSystem.file('out/android_arm64/flutter_embedding_release.jar').createSync(recursive: true); + fileSystem.file('out/android_arm64/flutter_embedding_release.pom').createSync(recursive: true); + + fileSystem.file('android/gradlew').createSync(recursive: true); + + fileSystem.directory('android') + .childFile('gradle.properties') + .createSync(recursive: true); + + fileSystem.file('android/build.gradle') + .createSync(recursive: true); + + fileSystem.directory('android') + .childDirectory('app') + .childFile('build.gradle') + ..createSync(recursive: true) + ..writeAsStringSync('apply from: irrelevant/flutter.gradle'); + + // Let any process start. Assert after. + when(mockProcessManager.run( + any, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory'), + )).thenAnswer((_) async => ProcessResult(1, 0, '', '')); + + when(mockProcessManager.start(any, + workingDirectory: anyNamed('workingDirectory'), + environment: anyNamed('environment'))) + .thenAnswer((_) { + return Future.value( + createMockProcess( + exitCode: 1, + ) + ); + }); + + await expectLater(() async { + await buildGradleApp( + project: FlutterProject.current(), + androidBuildInfo: const AndroidBuildInfo( + BuildInfo( + BuildMode.release, + null, + treeShakeIcons: false, + ), + ), + target: 'lib/main.dart', + isBuildingBundle: false, + localGradleErrors: const [], + ); + }, throwsToolExit()); + + final List actualGradlewCall = verify( + mockProcessManager.start( + captureAny, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory') + ), + ).captured.last as List; + + expect(actualGradlewCall, contains('/android/gradlew')); + expect(actualGradlewCall, contains('-Plocal-engine-out=out/android_arm64')); + expect(actualGradlewCall, contains('-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0')); + expect(actualGradlewCall, contains('-Plocal-engine-build-mode=release')); + + }, overrides: { + AndroidSdk: () => mockAndroidSdk, + AndroidStudio: () => mockAndroidStudio, + Artifacts: () => mockArtifacts, + Cache: () => cache, + Platform: () => android, + FileSystem: () => fileSystem, + ProcessManager: () => mockProcessManager, + }); + + testUsingContext( + 'build apk uses selected local engine,the engine abi is x86', () async { + when(mockArtifacts.getArtifactPath(Artifact.flutterFramework, + platform: anyNamed('platform'), mode: anyNamed('mode'))).thenReturn('engine'); + when(mockArtifacts.engineOutPath).thenReturn(fileSystem.path.join('out', 'android_x86')); + + fileSystem.file('out/android_x86/flutter_embedding_release.pom') + ..createSync(recursive: true) + ..writeAsStringSync(''' + + + 1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b + + + +'''); + fileSystem.file('out/android_x86/x86_release.pom').createSync(recursive: true); + fileSystem.file('out/android_x86/x86_release.jar').createSync(recursive: true); + fileSystem.file('out/android_x86/flutter_embedding_release.jar').createSync(recursive: true); + fileSystem.file('out/android_x86/flutter_embedding_release.pom').createSync(recursive: true); + + fileSystem.file('android/gradlew').createSync(recursive: true); + + fileSystem.directory('android') + .childFile('gradle.properties') + .createSync(recursive: true); + + fileSystem.file('android/build.gradle') + .createSync(recursive: true); + + fileSystem.directory('android') + .childDirectory('app') + .childFile('build.gradle') + ..createSync(recursive: true) + ..writeAsStringSync('apply from: irrelevant/flutter.gradle'); + + // Let any process start. Assert after. + when(mockProcessManager.run( + any, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory'), + )).thenAnswer((_) async => ProcessResult(1, 0, '', '')); + + when(mockProcessManager.start(any, + workingDirectory: anyNamed('workingDirectory'), + environment: anyNamed('environment'))) + .thenAnswer((_) { + return Future.value( + createMockProcess( + exitCode: 1, + ) + ); + }); + + await expectLater(() async { + await buildGradleApp( + project: FlutterProject.current(), + androidBuildInfo: const AndroidBuildInfo( + BuildInfo( + BuildMode.release, + null, + treeShakeIcons: false, + ), + ), + target: 'lib/main.dart', + isBuildingBundle: false, + localGradleErrors: const [], + ); + }, throwsToolExit()); + + final List actualGradlewCall = verify( + mockProcessManager.start( + captureAny, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory') + ), + ).captured.last as List; + + expect(actualGradlewCall, contains('/android/gradlew')); + expect(actualGradlewCall, contains('-Plocal-engine-out=out/android_x86')); + expect(actualGradlewCall, contains('-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0')); + expect(actualGradlewCall, contains('-Plocal-engine-build-mode=release')); + + }, overrides: { + AndroidSdk: () => mockAndroidSdk, + AndroidStudio: () => mockAndroidStudio, + Artifacts: () => mockArtifacts, + Cache: () => cache, + Platform: () => android, + FileSystem: () => fileSystem, + ProcessManager: () => mockProcessManager, + }); + + testUsingContext( + 'build apk uses selected local engine,the engine abi is x64', () async { + when(mockArtifacts.getArtifactPath(Artifact.flutterFramework, + platform: anyNamed('platform'), mode: anyNamed('mode'))).thenReturn('engine'); + when(mockArtifacts.engineOutPath).thenReturn(fileSystem.path.join('out', 'android_x64')); + + fileSystem.file('out/android_x64/flutter_embedding_release.pom') + ..createSync(recursive: true) + ..writeAsStringSync(''' + + + 1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b + + + +'''); + fileSystem.file('out/android_x64/x86_64_release.pom').createSync(recursive: true); + fileSystem.file('out/android_x64/x86_64_release.jar').createSync(recursive: true); + fileSystem.file('out/android_x64/flutter_embedding_release.jar').createSync(recursive: true); + fileSystem.file('out/android_x64/flutter_embedding_release.pom').createSync(recursive: true); + + fileSystem.file('android/gradlew').createSync(recursive: true); + + fileSystem.directory('android') + .childFile('gradle.properties') + .createSync(recursive: true); + + fileSystem.file('android/build.gradle') + .createSync(recursive: true); + + fileSystem.directory('android') + .childDirectory('app') + .childFile('build.gradle') + ..createSync(recursive: true) + ..writeAsStringSync('apply from: irrelevant/flutter.gradle'); + + // Let any process start. Assert after. + when(mockProcessManager.run( + any, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory'), + )).thenAnswer((_) async => ProcessResult(1, 0, '', '')); + + when(mockProcessManager.start(any, + workingDirectory: anyNamed('workingDirectory'), + environment: anyNamed('environment'))) + .thenAnswer((_) { + return Future.value( + createMockProcess( + exitCode: 1, + ) + ); + }); + + await expectLater(() async { + await buildGradleApp( + project: FlutterProject.current(), + androidBuildInfo: const AndroidBuildInfo( + BuildInfo( + BuildMode.release, + null, + treeShakeIcons: false, + ), + ), + target: 'lib/main.dart', + isBuildingBundle: false, + localGradleErrors: const [], + ); + }, throwsToolExit()); + + final List actualGradlewCall = verify( + mockProcessManager.start( + captureAny, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory') + ), + ).captured.last as List; + + expect(actualGradlewCall, contains('/android/gradlew')); + expect(actualGradlewCall, contains('-Plocal-engine-out=out/android_x64')); + expect(actualGradlewCall, contains('-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0')); + expect(actualGradlewCall, contains('-Plocal-engine-build-mode=release')); + + }, overrides: { + AndroidSdk: () => mockAndroidSdk, + AndroidStudio: () => mockAndroidStudio, + Artifacts: () => mockArtifacts, + Cache: () => cache, + Platform: () => android, + FileSystem: () => fileSystem, + ProcessManager: () => mockProcessManager, + }); + + testUsingContext('build aar uses selected local engine,the engine abi is arm', () async { when(mockArtifacts.getArtifactPath(Artifact.flutterFramework, platform: TargetPlatform.android_arm, mode: anyNamed('mode'))).thenReturn('engine'); when(mockArtifacts.engineOutPath).thenReturn(fileSystem.path.join('out', 'android_arm')); @@ -1849,6 +2128,300 @@ plugin1=${plugin1.path} FileSystemUtils: () => fileSystemUtils, ProcessManager: () => mockProcessManager, }); + + testUsingContext( + 'build aar uses selected local engine,the engine abi is arm64', () async { + when(mockArtifacts.getArtifactPath(Artifact.flutterFramework, + platform: anyNamed('platform'), mode: anyNamed('mode'))).thenReturn('engine'); + when(mockArtifacts.engineOutPath).thenReturn(fileSystem.path.join('out', 'android_arm64')); + + fileSystem.file('out/android_arm64/flutter_embedding_release.pom') + ..createSync(recursive: true) + ..writeAsStringSync(''' + + + 1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b + + + +'''); + fileSystem.file('out/android_arm64/arm64_v8a_release.pom').createSync(recursive: true); + fileSystem.file('out/android_arm64/arm64_v8a_release.jar').createSync(recursive: true); + fileSystem.file('out/android_arm64/flutter_embedding_release.jar').createSync(recursive: true); + fileSystem.file('out/android_arm64/flutter_embedding_release.pom').createSync(recursive: true); + + final File manifestFile = fileSystem.file('pubspec.yaml'); + manifestFile.createSync(recursive: true); + manifestFile.writeAsStringSync(''' + flutter: + module: + androidPackage: com.example.test + ''' + ); + + fileSystem.directory('.android/gradle') + .createSync(recursive: true); + + fileSystem.directory('.android/gradle/wrapper') + .createSync(recursive: true); + + fileSystem.file('.android/gradlew').createSync(recursive: true); + + fileSystem.file('.android/gradle.properties') + .writeAsStringSync('irrelevant'); + + fileSystem.file('.android/build.gradle') + .createSync(recursive: true); + + // Let any process start. Assert after. + when(mockProcessManager.run( + any, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory'), + )).thenAnswer((_) async => ProcessResult(1, 0, '', '')); + + fileSystem.directory('build/outputs/repo').createSync(recursive: true); + + when(fileSystemUtils.copyDirectorySync(any, any)).thenReturn(null); + + await buildGradleAar( + androidBuildInfo: const AndroidBuildInfo( + BuildInfo(BuildMode.release, null, treeShakeIcons: false)), + project: FlutterProject.current(), + outputDirectory: fileSystem.directory('build/'), + target: '', + buildNumber: '2.0', + ); + + final List actualGradlewCall = verify( + mockProcessManager.run( + captureAny, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory'), + ), + ).captured.last as List; + + expect(actualGradlewCall, contains('/.android/gradlew')); + expect(actualGradlewCall, contains('-Plocal-engine-out=out/android_arm64')); + expect(actualGradlewCall, contains('-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0')); + expect(actualGradlewCall, contains('-Plocal-engine-build-mode=release')); + expect(actualGradlewCall, contains('-PbuildNumber=2.0')); + + // Verify the local engine repo is copied into the generated Maven repo. + final List copyDirectoryArguments = verify( + fileSystemUtils.copyDirectorySync(captureAny, captureAny) + ).captured; + + expect(copyDirectoryArguments.length, 2); + expect((copyDirectoryArguments.first as Directory).path, '/.tmp_rand0/flutter_tool_local_engine_repo.rand0'); + expect((copyDirectoryArguments.last as Directory).path, 'build/outputs/repo'); + + }, overrides: { + AndroidSdk: () => mockAndroidSdk, + AndroidStudio: () => mockAndroidStudio, + Artifacts: () => mockArtifacts, + Cache: () => cache, + Platform: () => android, + FileSystem: () => fileSystem, + FileSystemUtils: () => fileSystemUtils, + ProcessManager: () => mockProcessManager, + }); + + testUsingContext( + 'build aar uses selected local engine,the engine abi is x86', () async { + when(mockArtifacts.getArtifactPath(Artifact.flutterFramework, + platform: anyNamed('platform'), mode: anyNamed('mode'))).thenReturn('engine'); + when(mockArtifacts.engineOutPath).thenReturn(fileSystem.path.join('out', 'android_x86')); + + fileSystem.file('out/android_x86/flutter_embedding_release.pom') + ..createSync(recursive: true) + ..writeAsStringSync(''' + + + 1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b + + + +'''); + fileSystem.file('out/android_x86/x86_release.pom').createSync(recursive: true); + fileSystem.file('out/android_x86/x86_release.jar').createSync(recursive: true); + fileSystem.file('out/android_x86/flutter_embedding_release.jar').createSync(recursive: true); + fileSystem.file('out/android_x86/flutter_embedding_release.pom').createSync(recursive: true); + + final File manifestFile = fileSystem.file('pubspec.yaml'); + manifestFile.createSync(recursive: true); + manifestFile.writeAsStringSync(''' + flutter: + module: + androidPackage: com.example.test + ''' + ); + + fileSystem.directory('.android/gradle') + .createSync(recursive: true); + + fileSystem.directory('.android/gradle/wrapper') + .createSync(recursive: true); + + fileSystem.file('.android/gradlew').createSync(recursive: true); + + fileSystem.file('.android/gradle.properties') + .writeAsStringSync('irrelevant'); + + fileSystem.file('.android/build.gradle') + .createSync(recursive: true); + + // Let any process start. Assert after. + when(mockProcessManager.run( + any, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory'), + )).thenAnswer((_) async => ProcessResult(1, 0, '', '')); + + fileSystem.directory('build/outputs/repo').createSync(recursive: true); + + when(fileSystemUtils.copyDirectorySync(any, any)).thenReturn(null); + + await buildGradleAar( + androidBuildInfo: const AndroidBuildInfo( + BuildInfo(BuildMode.release, null, treeShakeIcons: false)), + project: FlutterProject.current(), + outputDirectory: fileSystem.directory('build/'), + target: '', + buildNumber: '2.0', + ); + + final List actualGradlewCall = verify( + mockProcessManager.run( + captureAny, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory'), + ), + ).captured.last as List; + + expect(actualGradlewCall, contains('/.android/gradlew')); + expect(actualGradlewCall, contains('-Plocal-engine-out=out/android_x86')); + expect(actualGradlewCall, contains('-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0')); + expect(actualGradlewCall, contains('-Plocal-engine-build-mode=release')); + expect(actualGradlewCall, contains('-PbuildNumber=2.0')); + + // Verify the local engine repo is copied into the generated Maven repo. + final List copyDirectoryArguments = verify( + fileSystemUtils.copyDirectorySync(captureAny, captureAny) + ).captured; + + expect(copyDirectoryArguments.length, 2); + expect((copyDirectoryArguments.first as Directory).path, '/.tmp_rand0/flutter_tool_local_engine_repo.rand0'); + expect((copyDirectoryArguments.last as Directory).path, 'build/outputs/repo'); + + }, overrides: { + AndroidSdk: () => mockAndroidSdk, + AndroidStudio: () => mockAndroidStudio, + Artifacts: () => mockArtifacts, + Cache: () => cache, + Platform: () => android, + FileSystem: () => fileSystem, + FileSystemUtils: () => fileSystemUtils, + ProcessManager: () => mockProcessManager, + }); + + testUsingContext( + 'build aar uses selected local engine,the engine abi is x64', () async { + when(mockArtifacts.getArtifactPath(Artifact.flutterFramework, + platform: anyNamed('platform'), mode: anyNamed('mode'))).thenReturn('engine'); + when(mockArtifacts.engineOutPath).thenReturn(fileSystem.path.join('out', 'android_x64')); + + fileSystem.file('out/android_x64/flutter_embedding_release.pom') + ..createSync(recursive: true) + ..writeAsStringSync(''' + + + 1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b + + + +'''); + fileSystem.file('out/android_x64/x86_64_release.pom').createSync(recursive: true); + fileSystem.file('out/android_x64/x86_64_release.jar').createSync(recursive: true); + fileSystem.file('out/android_x64/flutter_embedding_release.jar').createSync(recursive: true); + fileSystem.file('out/android_x64/flutter_embedding_release.pom').createSync(recursive: true); + + final File manifestFile = fileSystem.file('pubspec.yaml'); + manifestFile.createSync(recursive: true); + manifestFile.writeAsStringSync(''' + flutter: + module: + androidPackage: com.example.test + ''' + ); + + fileSystem.directory('.android/gradle') + .createSync(recursive: true); + + fileSystem.directory('.android/gradle/wrapper') + .createSync(recursive: true); + + fileSystem.file('.android/gradlew').createSync(recursive: true); + + fileSystem.file('.android/gradle.properties') + .writeAsStringSync('irrelevant'); + + fileSystem.file('.android/build.gradle') + .createSync(recursive: true); + + // Let any process start. Assert after. + when(mockProcessManager.run( + any, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory'), + )).thenAnswer((_) async => ProcessResult(1, 0, '', '')); + + fileSystem.directory('build/outputs/repo').createSync(recursive: true); + + when(fileSystemUtils.copyDirectorySync(any, any)).thenReturn(null); + + await buildGradleAar( + androidBuildInfo: const AndroidBuildInfo( + BuildInfo(BuildMode.release, null, treeShakeIcons: false)), + project: FlutterProject.current(), + outputDirectory: fileSystem.directory('build/'), + target: '', + buildNumber: '2.0', + ); + + final List actualGradlewCall = verify( + mockProcessManager.run( + captureAny, + environment: anyNamed('environment'), + workingDirectory: anyNamed('workingDirectory'), + ), + ).captured.last as List; + + expect(actualGradlewCall, contains('/.android/gradlew')); + expect(actualGradlewCall, contains('-Plocal-engine-out=out/android_x64')); + expect(actualGradlewCall, contains('-Plocal-engine-repo=/.tmp_rand0/flutter_tool_local_engine_repo.rand0')); + expect(actualGradlewCall, contains('-Plocal-engine-build-mode=release')); + expect(actualGradlewCall, contains('-PbuildNumber=2.0')); + + // Verify the local engine repo is copied into the generated Maven repo. + final List copyDirectoryArguments = verify( + fileSystemUtils.copyDirectorySync(captureAny, captureAny) + ).captured; + + expect(copyDirectoryArguments.length, 2); + expect((copyDirectoryArguments.first as Directory).path, '/.tmp_rand0/flutter_tool_local_engine_repo.rand0'); + expect((copyDirectoryArguments.last as Directory).path, 'build/outputs/repo'); + + }, overrides: { + AndroidSdk: () => mockAndroidSdk, + AndroidStudio: () => mockAndroidStudio, + Artifacts: () => mockArtifacts, + Cache: () => cache, + Platform: () => android, + FileSystem: () => fileSystem, + FileSystemUtils: () => fileSystemUtils, + ProcessManager: () => mockProcessManager, + }); }); group('printHowToConsumeAar', () { diff --git a/packages/flutter_tools/test/general.shard/commands/build_apk_test.dart b/packages/flutter_tools/test/general.shard/commands/build_apk_test.dart index fab0c2b12d8..561915582b8 100644 --- a/packages/flutter_tools/test/general.shard/commands/build_apk_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/build_apk_test.dart @@ -214,10 +214,10 @@ void main() { [ gradlew, '-q', + '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}', '-Ptrack-widget-creation=true', '-Pshrink=true', - '-Ptarget-platform=android-arm,android-arm64,android-x64', 'assembleRelease', ], workingDirectory: anyNamed('workingDirectory'), @@ -242,10 +242,10 @@ void main() { [ gradlew, '-q', + '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}', '-Ptrack-widget-creation=true', '-Pshrink=true', - '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Psplit-debug-info=${tempDir.path}', 'assembleRelease', ], @@ -274,9 +274,9 @@ void main() { [ gradlew, '-q', + '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}', '-Ptrack-widget-creation=true', - '-Ptarget-platform=android-arm,android-arm64,android-x64', 'assembleRelease', ], workingDirectory: anyNamed('workingDirectory'), @@ -297,10 +297,10 @@ void main() { [ gradlew, '-q', + '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}', '-Ptrack-widget-creation=true', '-Pshrink=true', - '-Ptarget-platform=android-arm,android-arm64,android-x64', 'assembleRelease', ], workingDirectory: anyNamed('workingDirectory'), @@ -352,10 +352,10 @@ void main() { [ gradlew, '-q', + '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}', '-Ptrack-widget-creation=true', '-Pshrink=true', - '-Ptarget-platform=android-arm,android-arm64,android-x64', 'assembleRelease', ], workingDirectory: anyNamed('workingDirectory'), @@ -403,10 +403,10 @@ void main() { [ gradlew, '-q', + '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}', '-Ptrack-widget-creation=true', '-Pshrink=true', - '-Ptarget-platform=android-arm,android-arm64,android-x64', 'assembleRelease', ], workingDirectory: anyNamed('workingDirectory'), diff --git a/packages/flutter_tools/test/general.shard/commands/build_appbundle_test.dart b/packages/flutter_tools/test/general.shard/commands/build_appbundle_test.dart index 1dec6a02958..1fc1a70e1cb 100644 --- a/packages/flutter_tools/test/general.shard/commands/build_appbundle_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/build_appbundle_test.dart @@ -200,10 +200,10 @@ void main() { [ gradlew, '-q', + '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}', '-Ptrack-widget-creation=false', '-Pshrink=true', - '-Ptarget-platform=android-arm,android-arm64,android-x64', 'bundleRelease', ], workingDirectory: anyNamed('workingDirectory'), @@ -233,9 +233,9 @@ void main() { [ gradlew, '-q', + '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}', '-Ptrack-widget-creation=false', - '-Ptarget-platform=android-arm,android-arm64,android-x64', 'bundleRelease', ], workingDirectory: anyNamed('workingDirectory'), @@ -256,10 +256,10 @@ void main() { [ gradlew, '-q', + '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}', '-Ptrack-widget-creation=false', '-Pshrink=true', - '-Ptarget-platform=android-arm,android-arm64,android-x64', 'bundleRelease', ], workingDirectory: anyNamed('workingDirectory'), @@ -311,10 +311,10 @@ void main() { [ gradlew, '-q', + '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}', '-Ptrack-widget-creation=false', '-Pshrink=true', - '-Ptarget-platform=android-arm,android-arm64,android-x64', 'assembleRelease', ], workingDirectory: anyNamed('workingDirectory'), @@ -362,10 +362,10 @@ void main() { [ gradlew, '-q', + '-Ptarget-platform=android-arm,android-arm64,android-x64', '-Ptarget=${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}', '-Ptrack-widget-creation=false', '-Pshrink=true', - '-Ptarget-platform=android-arm,android-arm64,android-x64', 'assembleRelease', ], workingDirectory: anyNamed('workingDirectory'),