import 'dart:io'; import 'dart:convert'; void main(List arguments) async { print('🚀 开始构建Flutter Android应用...'); // 默认构建 ARM64 + ARM32(推荐) final targetPlatform = arguments.contains('--arm64-only') ? 'android-arm64' : 'android-arm64,android-arm'; try { // 检查Flutter环境 await checkFlutterEnvironment(); // 构建Flutter Android应用 final apkPath = await buildFlutterApp(targetPlatform); // 生成version.json文件 await generateVersionJson(apkPath, targetPlatform); print('✅ 构建完成!'); print('📦 APK位置: $apkPath'); } catch (e) { print('❌ 构建过程中出现错误: $e'); exit(1); } } Future buildFlutterApp(String targetPlatform) async { print('📱 正在构建Flutter Android应用...'); print('🎯 目标平台: $targetPlatform'); // 清理构建缓存 print('🧹 清理构建缓存...'); await runFlutterCommand(['clean']); // 获取pub依赖 print('📦 获取依赖...'); await runFlutterCommand(['pub', 'get']); // 构建APK(指定目标平台) print('🔨 构建Release APK...'); await runFlutterCommand([ 'build', 'apk', '--release', '--target-platform=$targetPlatform', ]); print('✅ Flutter应用构建成功!'); // 根据目标平台生成对应的APK文件名 String apkName; if (targetPlatform == 'android-arm64') { apkName = 'app-arm64-release.apk'; } else if (targetPlatform == 'android-arm') { apkName = 'app-arm-release.apk'; } else { apkName = 'app-release.apk'; } return 'build/app/outputs/flutter-apk/$apkName'; } Future runFlutterCommand(List args) async { final result = await Process.run('flutter', args, runInShell: true); if (result.exitCode != 0) { throw Exception('Flutter命令执行失败: ${result.stderr}'); } } Future generateVersionJson(String apkPath, String targetPlatform) async { print('📄 正在生成version.json文件...'); final apkFile = File(apkPath); String fileSize = '未知'; if (await apkFile.exists()) { final apkSize = await apkFile.length(); fileSize = '${(apkSize / (1024 * 1024)).toStringAsFixed(1)}MB'; print('📦 APK文件大小: $fileSize'); } final now = DateTime.now(); final buildTime = '${now.year}-${now.month.toString().padLeft(2, '0')}-${now.day.toString().padLeft(2, '0')} ${now.hour.toString().padLeft(2, '0')}:${now.minute.toString().padLeft(2, '0')}'; final versionInfo = { "version": "1.0.1", "build_number": getBuildNumber(), "build_time": buildTime, "target_platform": targetPlatform, "file_size": fileSize, "url": "http://xhota.anxincloud.cn/problem/app-release.apk", "description": "1. 修复了xxx bug。\n2. 新增了xxx功能。\n3. 优化了用户体验。", "platform": "android", }; final jsonFile = File('build/app/outputs/flutter-apk/version.json'); await jsonFile.writeAsString( const JsonEncoder.withIndent(' ').convert(versionInfo), ); print('✅ version.json文件生成成功!'); } String getBuildNumber() { final now = DateTime.now(); return '${now.year}${now.month.toString().padLeft(2, '0')}${now.day.toString().padLeft(2, '0')}${now.hour.toString().padLeft(2, '0')}${now.minute.toString().padLeft(2, '0')}'; } Future checkFlutterEnvironment() async { final result = await Process.run('flutter', ['--version'], runInShell: true); if (result.exitCode != 0) { throw Exception('Flutter环境检查失败'); } print('✅ Flutter环境正常'); }