mirror of
https://github.com/flutter/flutter
synced 2024-08-25 11:07:06 +00:00
189 lines
5.8 KiB
Dart
189 lines
5.8 KiB
Dart
// Copyright 2014 The Flutter 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:io';
|
|
|
|
import 'package:flutter_devicelab/framework/apk_utils.dart';
|
|
import 'package:flutter_devicelab/framework/framework.dart';
|
|
import 'package:flutter_devicelab/framework/task_result.dart';
|
|
import 'package:flutter_devicelab/framework/utils.dart';
|
|
import 'package:path/path.dart' as path;
|
|
|
|
Future<void> main() async {
|
|
await task(() async {
|
|
try {
|
|
await runPluginProjectTest((FlutterPluginProject pluginProject) async {
|
|
section('APK content for task assembleDebug without explicit target platform');
|
|
await inDirectory(pluginProject.exampleAndroidPath, () {
|
|
return flutter(
|
|
'build',
|
|
options: <String>[
|
|
'apk',
|
|
'--debug',
|
|
'--verbose',
|
|
],
|
|
);
|
|
});
|
|
|
|
Iterable<String> apkFiles = await getFilesInApk(pluginProject.debugApkPath);
|
|
|
|
checkCollectionContains<String>(<String>[
|
|
...flutterAssets,
|
|
...debugAssets,
|
|
...baseApkFiles,
|
|
'lib/armeabi-v7a/libflutter.so',
|
|
'lib/arm64-v8a/libflutter.so',
|
|
// Debug mode intentionally includes `x86` and `x86_64`.
|
|
'lib/x86/libflutter.so',
|
|
'lib/x86_64/libflutter.so',
|
|
], apkFiles);
|
|
|
|
checkCollectionDoesNotContain<String>(<String>[
|
|
'lib/arm64-v8a/libapp.so',
|
|
'lib/armeabi-v7a/libapp.so',
|
|
'lib/x86/libapp.so',
|
|
'lib/x86_64/libapp.so',
|
|
], apkFiles);
|
|
|
|
section('APK content for task assembleRelease without explicit target platform');
|
|
|
|
await inDirectory(pluginProject.exampleAndroidPath, () {
|
|
return flutter(
|
|
'build',
|
|
options: <String>[
|
|
'apk',
|
|
'--release',
|
|
'--verbose',
|
|
],
|
|
);
|
|
});
|
|
|
|
apkFiles = await getFilesInApk(pluginProject.releaseApkPath);
|
|
|
|
checkCollectionContains<String>(<String>[
|
|
...flutterAssets,
|
|
...baseApkFiles,
|
|
'lib/armeabi-v7a/libflutter.so',
|
|
'lib/armeabi-v7a/libapp.so',
|
|
'lib/arm64-v8a/libflutter.so',
|
|
'lib/arm64-v8a/libapp.so',
|
|
'lib/x86_64/libflutter.so',
|
|
'lib/x86_64/libapp.so',
|
|
], apkFiles);
|
|
|
|
checkCollectionDoesNotContain<String>(debugAssets, apkFiles);
|
|
|
|
section('APK content for task assembleRelease with target platform = android-arm, android-arm64');
|
|
|
|
await inDirectory(pluginProject.exampleAndroidPath, () {
|
|
return flutter(
|
|
'build',
|
|
options: <String>[
|
|
'apk',
|
|
'--release',
|
|
'--verbose',
|
|
'--target-platform=android-arm,android-arm64',
|
|
],
|
|
);
|
|
});
|
|
|
|
apkFiles = await getFilesInApk(pluginProject.releaseApkPath);
|
|
|
|
checkCollectionContains<String>(<String>[
|
|
...flutterAssets,
|
|
...baseApkFiles,
|
|
'lib/armeabi-v7a/libflutter.so',
|
|
'lib/armeabi-v7a/libapp.so',
|
|
'lib/arm64-v8a/libflutter.so',
|
|
'lib/arm64-v8a/libapp.so',
|
|
], apkFiles);
|
|
|
|
checkCollectionDoesNotContain<String>(debugAssets, apkFiles);
|
|
|
|
section('APK content for task assembleRelease with '
|
|
'target platform = android-arm, android-arm64 and split per ABI');
|
|
|
|
await inDirectory(pluginProject.exampleAndroidPath, () {
|
|
return flutter(
|
|
'build',
|
|
options: <String>[
|
|
'apk',
|
|
'--release',
|
|
'--verbose',
|
|
'--split-per-abi',
|
|
'--target-platform=android-arm,android-arm64',
|
|
],
|
|
);
|
|
});
|
|
|
|
final Iterable<String> armApkFiles = await getFilesInApk(pluginProject.releaseArmApkPath);
|
|
|
|
checkCollectionContains<String>(<String>[
|
|
...flutterAssets,
|
|
...baseApkFiles,
|
|
'lib/armeabi-v7a/libflutter.so',
|
|
'lib/armeabi-v7a/libapp.so',
|
|
], armApkFiles);
|
|
|
|
checkCollectionDoesNotContain<String>(debugAssets, armApkFiles);
|
|
|
|
final Iterable<String> arm64ApkFiles = await getFilesInApk(pluginProject.releaseArm64ApkPath);
|
|
|
|
checkCollectionContains<String>(<String>[
|
|
...flutterAssets,
|
|
...baseApkFiles,
|
|
'lib/arm64-v8a/libflutter.so',
|
|
'lib/arm64-v8a/libapp.so',
|
|
], arm64ApkFiles);
|
|
|
|
checkCollectionDoesNotContain<String>(debugAssets, arm64ApkFiles);
|
|
});
|
|
|
|
await runProjectTest((FlutterProject project) async {
|
|
section('gradlew assembleRelease');
|
|
|
|
await inDirectory(project.rootPath, () {
|
|
return flutter(
|
|
'build',
|
|
options: <String>[
|
|
'apk',
|
|
'--release',
|
|
'--verbose',
|
|
],
|
|
);
|
|
});
|
|
|
|
// When the platform-target isn't specified, we generate the snapshots
|
|
// for arm and arm64.
|
|
final List<String> targetPlatforms = <String>[
|
|
'arm64-v8a',
|
|
'armeabi-v7a',
|
|
];
|
|
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());
|
|
}
|
|
});
|
|
}
|