diff --git a/android/gradle.properties b/android/gradle.properties index 4bf4e55..2468a03 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,4 +1,4 @@ -org.gradle.jvmargs=-Xmx2g +org.gradle.jvmargs=-Xmx4g -Xms2g android.enableJetifier=true android.useAndroidX=true android.enableR8=false diff --git a/pubspec.lock b/pubspec.lock index 379d8e9..506af3b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -169,6 +169,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.9.10" + cli_util: + dependency: transitive + description: + name: cli_util + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.0" clock: dependency: transitive description: @@ -522,6 +529,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.2.0" + grinder: + dependency: "direct dev" + description: + name: grinder + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.8.6" html: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 6d49292..6ba5317 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -219,6 +219,7 @@ dev_dependencies: sdk: flutter build_runner: ^1.0.0 json_serializable: ^2.0.0 + grinder: flutter: uses-material-design: true diff --git a/tool/config.dart b/tool/config.dart new file mode 100644 index 0000000..bcf5f96 --- /dev/null +++ b/tool/config.dart @@ -0,0 +1,27 @@ +class Config { + ///用户根目录 + static const homeDir = '/Users/akufe'; + + ///签名密码 + static const recookPassword = 'recook'; + + /// 签名目录 + static const keystorePath = './jks/recook.keystore'; + + ///包名 + static const packageName = 'RECOOK'; + + ///Android SDK 目录 + static String get androidSdkRoot => '$homeDir/Library/Android/sdk'; + + ///Apksigner 目录 + static String get apksignerPath => + '$androidSdkRoot/build-tools/30.0.2/apksigner'; + + ///下载目录 + static String get downloadPath => '$homeDir/Downloads'; + + ///打包目录 + static String get buildPath => + './build/app/outputs/flutter-apk/app-release.apk'; +} diff --git a/tool/grind.dart b/tool/grind.dart new file mode 100644 index 0000000..4967f3f --- /dev/null +++ b/tool/grind.dart @@ -0,0 +1,82 @@ +import 'dart:async'; +import 'dart:io'; +import 'package:grinder/grinder.dart'; + +import 'config.dart'; + +main(args) => grind(args); + +int pid; + +@Task() +test() => new TestRunner().testAsync(); + +///打包APK +@Task() +Future buildApk() async { + TaskArgs args = context.invocation.arguments; + bool verbose = args.getFlag('v'); + stdout.write("Build APK 📦\n"); + stdout.write("BUILDINGAPK"); + await Process.start('flutter', ['build', 'apk']).then((proc) async { + if (verbose) { + await stdout.addStream(proc.stdout); + await stderr.addStream(proc.stderr); + } + }); + stdout.write("\rBuild APK DONE 📦\n"); + stdout.write("copy build to download 🛠\n"); + await Process.run('rm', ['-rf', '${Config.downloadPath}/builds']); + await Process.run('mkdir', ['${Config.downloadPath}/builds']); + await Process.run('cp', [ + Config.buildPath, + '${Config.downloadPath}/builds/${Config.packageName}_release.apk' + ]); + + stdout.write("opening downloadPath 🛠\n"); + await Process.run('open', ['${Config.downloadPath}/builds']); + stdout.write("opening tencent reinforce 🛠\n"); + await Process.run( + 'open', ['https://console.cloud.tencent.com/ms/reinforce/upload']); +} + +@Task() +rawBuild({bool verbose = false}) async { + String getLine = stdin.readLineSync(); + stdout.write(getLine); +} + +///签名 +@Task() +sign() async { + stdout.write('start SIGN 🔑\n'); + ProcessResult process = await Process.run( + Config.apksignerPath, + [ + 'sign', + '--ks', + Config.keystorePath, + '--ks-key-alias', + 'alias', + '--ks-pass', + 'pass:${Config.recookPassword}', + '--key-pass', + 'pass:${Config.recookPassword}', + '--out', + '${Config.downloadPath}/builds/${Config.packageName}_release_signed.apk', + '${Config.downloadPath}/builds/${Config.packageName}_release.apk', + ], + ); + stdout.write(process.stdout); + stderr.write(process.stderr); + stdout.write('end SIGN 🔑\n'); +} + +@DefaultTask() +@Depends(test) +build() { + Pub.build(); +} + +@Task() +clean() => defaultClean();