diff --git a/packages/flutter_tools/lib/src/android/application_package.dart b/packages/flutter_tools/lib/src/android/application_package.dart index a1c54ed5a0..25c2cc3086 100644 --- a/packages/flutter_tools/lib/src/android/application_package.dart +++ b/packages/flutter_tools/lib/src/android/application_package.dart @@ -103,20 +103,11 @@ class AndroidApk extends ApplicationPackage implements PrebuiltApplicationPackag required ProcessUtils processUtils, required Logger logger, required FileSystem fileSystem, - BuildInfo? buildInfo, }) async { - final File apkFile; - final String filename; - if (buildInfo == null) { - filename = 'app.apk'; - } else if (buildInfo.flavor == null) { - filename = 'app-${buildInfo.mode.name}.apk'; - } else { - filename = 'app-${buildInfo.lowerCasedFlavor}-${buildInfo.mode.name}.apk'; - } + File apkFile; if (androidProject.isUsingGradle && androidProject.isSupportedVersion) { - apkFile = getApkDirectory(androidProject.parent).childFile(filename); + apkFile = getApkDirectory(androidProject.parent).childFile('app.apk'); if (apkFile.existsSync()) { // Grab information from the .apk. The gradle build script might alter // the application Id, so we need to look at what was actually built. @@ -133,7 +124,7 @@ class AndroidApk extends ApplicationPackage implements PrebuiltApplicationPackag // command will grab a new AndroidApk after building, to get the updated // IDs. } else { - apkFile = fileSystem.file(fileSystem.path.join(getAndroidBuildDirectory(), filename)); + apkFile = fileSystem.file(fileSystem.path.join(getAndroidBuildDirectory(), 'app.apk')); } final File manifest = androidProject.appManifestFile; diff --git a/packages/flutter_tools/lib/src/android/gradle.dart b/packages/flutter_tools/lib/src/android/gradle.dart index 683971afe2..cc00fb1c12 100644 --- a/packages/flutter_tools/lib/src/android/gradle.dart +++ b/packages/flutter_tools/lib/src/android/gradle.dart @@ -465,16 +465,13 @@ class AndroidGradleBuilder implements AndroidBuilder { ); return; } - // Gradle produced APKs. + // Gradle produced an APK. final Iterable apkFilesPaths = project.isModule ? findApkFilesModule(project, androidBuildInfo, _logger, _usage) : listApkPaths(androidBuildInfo); final Directory apkDirectory = getApkDirectory(project); - - // Copy the first APK to app.apk. - // TODO(AlexV525): Remove the copying once we can identify there are no tools is using the app.apk. - final File firstApkFile = apkDirectory.childFile(apkFilesPaths.first); - if (!firstApkFile.existsSync()) { + final File apkFile = apkDirectory.childFile(apkFilesPaths.first); + if (!apkFile.existsSync()) { _exitWithExpectedFileNotFound( project: project, fileExtension: '.apk', @@ -482,35 +479,27 @@ class AndroidGradleBuilder implements AndroidBuilder { usage: _usage, ); } - firstApkFile.copySync(apkDirectory.childFile('app.apk').path); - // Generate sha1 for every generated APKs. - for (final File apkFile in apkFilesPaths.map(apkDirectory.childFile)) { - if (!apkFile.existsSync()) { - _exitWithExpectedFileNotFound( - project: project, - fileExtension: '.apk', - logger: _logger, - usage: _usage, - ); - } + // Copy the first APK to app.apk, so `flutter run` can find it. + // TODO(egarciad): Handle multiple APKs. + apkFile.copySync(apkDirectory + .childFile('app.apk') + .path); + _logger.printTrace('calculateSha: $apkDirectory/app.apk'); - final String filename = apkFile.basename; - _logger.printTrace('Calculate SHA1: $apkDirectory/$filename'); - final File apkShaFile = apkDirectory.childFile('$filename.sha1'); - apkShaFile.writeAsStringSync(_calculateSha(apkFile)); + final File apkShaFile = apkDirectory.childFile('app.apk.sha1'); + apkShaFile.writeAsStringSync(_calculateSha(apkFile)); - final String appSize = (buildInfo.mode == BuildMode.debug) - ? '' // Don't display the size when building a debug variant. - : ' (${getSizeAsMB(apkFile.lengthSync())})'; - _logger.printStatus( - '${_logger.terminal.successMark} Built ${_fileSystem.path.relative(apkFile.path)}$appSize.', - color: TerminalColor.green, - ); + final String appSize = (buildInfo.mode == BuildMode.debug) + ? '' // Don't display the size when building a debug variant. + : ' (${getSizeAsMB(apkFile.lengthSync())})'; + _logger.printStatus( + '${_logger.terminal.successMark} Built ${_fileSystem.path.relative(apkFile.path)}$appSize.', + color: TerminalColor.green, + ); - if (buildInfo.codeSizeDirectory != null) { - await _performCodeSizeAnalysis('apk', apkFile, androidBuildInfo); - } + if (buildInfo.codeSizeDirectory != null) { + await _performCodeSizeAnalysis('apk', apkFile, androidBuildInfo); } } diff --git a/packages/flutter_tools/lib/src/flutter_application_package.dart b/packages/flutter_tools/lib/src/flutter_application_package.dart index 103f21c043..f1a8cba283 100644 --- a/packages/flutter_tools/lib/src/flutter_application_package.dart +++ b/packages/flutter_tools/lib/src/flutter_application_package.dart @@ -66,7 +66,6 @@ class FlutterApplicationPackageFactory extends ApplicationPackageFactory { androidSdk: _androidSdk, userMessages: _userMessages, fileSystem: _fileSystem, - buildInfo: buildInfo, ); } return AndroidApk.fromApk( diff --git a/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart b/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart index 1ed77e1ba3..94eb347eee 100644 --- a/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart @@ -65,7 +65,7 @@ void main() { platform: FakePlatform(), androidSdk: androidSdk, ); - final File apkFile = fileSystem.file('app-debug.apk')..createSync(); + final File apkFile = fileSystem.file('app.apk')..createSync(); final AndroidApk apk = AndroidApk( id: 'FlutterApp', applicationPackage: apkFile, @@ -88,7 +88,7 @@ void main() { command: ['adb', '-s', '1234', 'shell', 'pm', 'list', 'packages', 'FlutterApp'], )); processManager.addCommand(const FakeCommand( - command: ['adb', '-s', '1234', 'install', '-t', '-r', 'app-debug.apk'], + command: ['adb', '-s', '1234', 'install', '-t', '-r', 'app.apk'], )); processManager.addCommand(kShaCommand); processManager.addCommand(const FakeCommand( @@ -132,7 +132,7 @@ void main() { platform: FakePlatform(), androidSdk: androidSdk, ); - final File apkFile = fileSystem.file('app-debug.apk')..createSync(); + final File apkFile = fileSystem.file('app.apk')..createSync(); final AndroidApk apk = AndroidApk( id: 'FlutterApp', applicationPackage: apkFile, @@ -170,7 +170,7 @@ void main() { platform: FakePlatform(), androidSdk: androidSdk, ); - final File apkFile = fileSystem.file('app-debug.apk')..createSync(); + final File apkFile = fileSystem.file('app.apk')..createSync(); final AndroidApk apk = AndroidApk( id: 'FlutterApp', applicationPackage: apkFile, @@ -200,7 +200,7 @@ void main() { '-r', '--user', '10', - 'app-debug.apk', + 'app.apk', ], stdout: '\n\nThe Dart VM service is listening on http://127.0.0.1:456\n\n', )); diff --git a/packages/flutter_tools/test/general.shard/android/android_install_test.dart b/packages/flutter_tools/test/general.shard/android/android_install_test.dart index 21b653f53c..ca6fc9670d 100644 --- a/packages/flutter_tools/test/general.shard/android/android_install_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_install_test.dart @@ -31,7 +31,7 @@ const FakeCommand kInstallCommand = FakeCommand( '-r', '--user', '10', - 'app-debug.apk', + 'app.apk', ], ); const FakeCommand kStoreShaCommand = FakeCommand( @@ -71,7 +71,7 @@ void main() { stdout: '[ro.build.version.sdk]: [11]', ), ]); - final File apk = fileSystem.file('app-debug.apk')..createSync(); + final File apk = fileSystem.file('app.apk')..createSync(); final AndroidApk androidApk = AndroidApk( applicationPackage: apk, id: 'app', @@ -87,7 +87,7 @@ void main() { }); testWithoutContext('Cannot install app if APK file is missing', () async { - final File apk = fileSystem.file('app-debug.apk'); + final File apk = fileSystem.file('app.apk'); final AndroidApk androidApk = AndroidApk( applicationPackage: apk, id: 'app', @@ -115,7 +115,7 @@ void main() { kInstallCommand, kStoreShaCommand, ]); - final File apk = fileSystem.file('app-debug.apk')..createSync(); + final File apk = fileSystem.file('app.apk')..createSync(); final AndroidApk androidApk = AndroidApk( applicationPackage: apk, id: 'app', @@ -144,7 +144,7 @@ void main() { kInstallCommand, kStoreShaCommand, ]); - final File apk = fileSystem.file('app-debug.apk')..createSync(); + final File apk = fileSystem.file('app.apk')..createSync(); final AndroidApk androidApk = AndroidApk( applicationPackage: apk, id: 'app', @@ -182,13 +182,13 @@ void main() { '-r', '--user', 'jane', - 'app-debug.apk', + 'app.apk', ], exitCode: 1, stderr: 'Exception occurred while executing: java.lang.IllegalArgumentException: Bad user number: jane', ), ]); - final File apk = fileSystem.file('app-debug.apk')..createSync(); + final File apk = fileSystem.file('app.apk')..createSync(); final AndroidApk androidApk = AndroidApk( applicationPackage: apk, id: 'app', @@ -221,8 +221,8 @@ void main() { stdout: 'example_sha', ), ]); - final File apk = fileSystem.file('app-debug.apk')..createSync(); - fileSystem.file('app-debug.apk.sha1').writeAsStringSync('example_sha'); + final File apk = fileSystem.file('app.apk')..createSync(); + fileSystem.file('app.apk.sha1').writeAsStringSync('example_sha'); final AndroidApk androidApk = AndroidApk( applicationPackage: apk, id: 'app', @@ -254,7 +254,7 @@ void main() { stdout: 'different_example_sha', ), const FakeCommand( - command: ['adb', '-s', '1234', 'install', '-t', '-r', '--user', '10', 'app-debug.apk'], + command: ['adb', '-s', '1234', 'install', '-t', '-r', '--user', '10', 'app.apk'], exitCode: 1, stderr: '[INSTALL_FAILED_INSUFFICIENT_STORAGE]', ), @@ -262,8 +262,8 @@ void main() { kInstallCommand, const FakeCommand(command: ['adb', '-s', '1234', 'shell', 'echo', '-n', 'example_sha', '>', '/data/local/tmp/sky.app.sha1']), ]); - final File apk = fileSystem.file('app-debug.apk')..createSync(); - fileSystem.file('app-debug.apk.sha1').writeAsStringSync('example_sha'); + final File apk = fileSystem.file('app.apk')..createSync(); + fileSystem.file('app.apk.sha1').writeAsStringSync('example_sha'); final AndroidApk androidApk = AndroidApk( applicationPackage: apk, id: 'app', @@ -291,12 +291,12 @@ void main() { stdout: '\n' ), const FakeCommand( - command: ['adb', '-s', '1234', 'install', '-t', '-r', '--user', '10', 'app-debug.apk'], + command: ['adb', '-s', '1234', 'install', '-t', '-r', '--user', '10', 'app.apk'], exitCode: 1, stderr: '[INSTALL_FAILED_INSUFFICIENT_STORAGE]', ), ]); - final File apk = fileSystem.file('app-debug.apk')..createSync(); + final File apk = fileSystem.file('app.apk')..createSync(); final AndroidApk androidApk = AndroidApk( applicationPackage: apk, id: 'app', 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 643d5faf74..51527d7140 100644 --- a/packages/flutter_tools/test/general.shard/android/gradle_test.dart +++ b/packages/flutter_tools/test/general.shard/android/gradle_test.dart @@ -121,20 +121,6 @@ void main() { }); group('listApkPaths', () { - testWithoutContext('Finds APK without flavor in debug', () { - final Iterable apks = listApkPaths( - const AndroidBuildInfo(BuildInfo(BuildMode.debug, '', treeShakeIcons: false)), - ); - expect(apks, ['app-debug.apk']); - }); - - testWithoutContext('Finds APK with flavor in debug', () { - final Iterable apks = listApkPaths( - const AndroidBuildInfo(BuildInfo(BuildMode.debug, 'flavor1', treeShakeIcons: false)), - ); - expect(apks, ['app-flavor1-debug.apk']); - }); - testWithoutContext('Finds APK without flavor in release', () { final Iterable apks = listApkPaths( const AndroidBuildInfo(BuildInfo(BuildMode.release, '', treeShakeIcons: false)), diff --git a/packages/flutter_tools/test/general.shard/application_package_test.dart b/packages/flutter_tools/test/general.shard/application_package_test.dart index 260ea43bd4..fe1bb0fff4 100644 --- a/packages/flutter_tools/test/general.shard/application_package_test.dart +++ b/packages/flutter_tools/test/general.shard/application_package_test.dart @@ -57,7 +57,7 @@ void main() { testUsingContext('Licenses not available, platform and buildtools available, apk exists', () async { const String aaptPath = 'aaptPath'; - final File apkFile = globals.fs.file('app-debug.apk'); + final File apkFile = globals.fs.file('app.apk'); final FakeAndroidSdkVersion sdkVersion = FakeAndroidSdkVersion(); sdkVersion.aaptPath = aaptPath; sdk.latestVersion = sdkVersion; @@ -81,7 +81,7 @@ void main() { TargetPlatform.android_arm, applicationBinary: apkFile, ))!; - expect(applicationPackage.name, 'app-debug.apk'); + expect(applicationPackage.name, 'app.apk'); expect(applicationPackage, isA()); expect((applicationPackage as PrebuiltApplicationPackage).applicationPackage.path, apkFile.path); expect(fakeProcessManager, hasNoRemainingExpectations); @@ -103,7 +103,7 @@ void main() { await ApplicationPackageFactory.instance!.getPackageForPlatform( TargetPlatform.android_arm, - applicationBinary: globals.fs.file('app-debug.apk'), + applicationBinary: globals.fs.file('app.apk'), ); expect(fakeProcessManager, hasNoRemainingExpectations); }, overrides: overrides); diff --git a/packages/flutter_tools/test/general.shard/resident_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_runner_test.dart index d65c2e9ad5..b37f4844a2 100644 --- a/packages/flutter_tools/test/general.shard/resident_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_runner_test.dart @@ -312,7 +312,7 @@ void main() { [ flutterDevice, ], - applicationBinary: globals.fs.file('app-debug.apk'), + applicationBinary: globals.fs.file('app.apk'), stayResident: false, debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug), target: 'main.dart',