| // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:async'; |
| import 'dart:io'; |
| |
| import 'package:path/path.dart' as path; |
| import 'package:flutter_devicelab/framework/apk_utils.dart'; |
| import 'package:flutter_devicelab/framework/framework.dart'; |
| import 'package:flutter_devicelab/framework/utils.dart'; |
| |
| Future<void> main() async { |
| await task(() async { |
| try { |
| await runPluginProjectTest((FlutterPluginProject pluginProject) async { |
| section('APK content for task assembleDebug without explicit target platform'); |
| await pluginProject.runGradleTask('assembleDebug'); |
| |
| final Iterable<String> apkFiles = await getFilesInApk(pluginProject.debugApkPath); |
| |
| checkItContains<String>(<String>[ |
| 'AndroidManifest.xml', |
| 'classes.dex', |
| 'assets/flutter_assets/isolate_snapshot_data', |
| 'assets/flutter_assets/kernel_blob.bin', |
| 'assets/flutter_assets/vm_snapshot_data', |
| 'lib/arm64-v8a/libflutter.so', |
| 'lib/armeabi-v7a/libflutter.so', |
| // Debug mode intentionally includes `x86` and `x86_64`. |
| 'lib/x86/libflutter.so', |
| 'lib/x86_64/libflutter.so', |
| ], apkFiles); |
| |
| checkItDoesNotContain<String>(<String>[ |
| 'lib/arm64-v8a/libapp.so', |
| 'lib/armeabi-v7a/libapp.so', |
| 'lib/x86/libapp.so', |
| 'lib/x86_64/libapp.so', |
| ], apkFiles); |
| }); |
| |
| await runPluginProjectTest((FlutterPluginProject pluginProject) async { |
| section('APK content for task assembleRelease without explicit target platform'); |
| await pluginProject.runGradleTask('assembleRelease'); |
| |
| final Iterable<String> apkFiles = await getFilesInApk(pluginProject.releaseApkPath); |
| |
| checkItContains<String>(<String>[ |
| 'AndroidManifest.xml', |
| 'classes.dex', |
| 'lib/arm64-v8a/libflutter.so', |
| 'lib/arm64-v8a/libapp.so', |
| 'lib/armeabi-v7a/libflutter.so', |
| 'lib/armeabi-v7a/libapp.so', |
| ], apkFiles); |
| |
| checkItDoesNotContain<String>(<String>[ |
| 'assets/flutter_assets/isolate_snapshot_data', |
| 'assets/flutter_assets/kernel_blob.bin', |
| 'assets/flutter_assets/vm_snapshot_data', |
| ], apkFiles); |
| }); |
| |
| await runPluginProjectTest((FlutterPluginProject pluginProject) async { |
| section('APK content for task assembleRelease with target platform = android-arm, android-arm64'); |
| await pluginProject.runGradleTask('assembleRelease', |
| options: <String>['-Ptarget-platform=android-arm,android-arm64']); |
| |
| final Iterable<String> apkFiles = await getFilesInApk(pluginProject.releaseApkPath); |
| |
| checkItContains<String>(<String>[ |
| 'AndroidManifest.xml', |
| 'classes.dex', |
| 'lib/armeabi-v7a/libflutter.so', |
| 'lib/armeabi-v7a/libapp.so', |
| 'lib/arm64-v8a/libflutter.so', |
| 'lib/arm64-v8a/libapp.so', |
| ], apkFiles); |
| |
| checkItDoesNotContain<String>(<String>[ |
| 'assets/flutter_assets/isolate_snapshot_data', |
| 'assets/flutter_assets/kernel_blob.bin', |
| 'assets/flutter_assets/vm_snapshot_data', |
| ], apkFiles); |
| }); |
| |
| await runPluginProjectTest((FlutterPluginProject pluginProject) async { |
| section('APK content for task assembleRelease with ' |
| 'target platform = android-arm, android-arm64 and split per ABI'); |
| await pluginProject.runGradleTask('assembleRelease', |
| options: <String>['-Ptarget-platform=android-arm,android-arm64', '-Psplit-per-abi=true']); |
| |
| final Iterable<String> armApkFiles = await getFilesInApk(pluginProject.releaseArmApkPath); |
| |
| checkItContains<String>(<String>[ |
| 'AndroidManifest.xml', |
| 'classes.dex', |
| 'lib/armeabi-v7a/libflutter.so', |
| 'lib/armeabi-v7a/libapp.so', |
| ], armApkFiles); |
| |
| checkItDoesNotContain<String>(<String>[ |
| 'assets/flutter_assets/isolate_snapshot_data', |
| 'assets/flutter_assets/kernel_blob.bin', |
| 'assets/flutter_assets/vm_snapshot_data', |
| ], armApkFiles); |
| |
| final Iterable<String> arm64ApkFiles = await getFilesInApk(pluginProject.releaseArm64ApkPath); |
| |
| checkItContains<String>(<String>[ |
| 'AndroidManifest.xml', |
| 'classes.dex', |
| 'lib/arm64-v8a/libflutter.so', |
| 'lib/arm64-v8a/libapp.so', |
| ], arm64ApkFiles); |
| |
| checkItDoesNotContain<String>(<String>[ |
| 'assets/flutter_assets/isolate_snapshot_data', |
| 'assets/flutter_assets/kernel_blob.bin', |
| 'assets/flutter_assets/vm_snapshot_data', |
| ], arm64ApkFiles); |
| }); |
| |
| await runProjectTest((FlutterProject project) async { |
| section('gradlew assembleRelease'); |
| await project.runGradleTask('assembleRelease'); |
| |
| // When the platform-target isn't specified, we generate the snapshots |
| // for arm and arm64. |
| final List<String> targetPlatforms = <String>[ |
| 'android-arm', |
| 'android-arm64' |
| ]; |
| for (final String targetPlatform in targetPlatforms) { |
| final String androidArmSnapshotPath = path.join( |
| project.rootPath, |
| 'build', |
| 'app', |
| 'intermediates', |
| 'flutter', |
| 'release', |
| targetPlatform); |
| |
| final String sharedLibrary = path.join(androidArmSnapshotPath, 'app.so'); |
| if (!File(sharedLibrary).existsSync()) { |
| throw TaskResult.failure('Shared library doesn\'t exist'); |
| } |
| } |
| }); |
| |
| return TaskResult.success(null); |
| } on TaskResult catch (taskResult) { |
| return taskResult; |
| } catch (e) { |
| return TaskResult.failure(e.toString()); |
| } |
| }); |
| } |