parent
5d8db16f37
commit
a903a55316
@ -1,4 +1,4 @@
|
|||||||
org.gradle.jvmargs=-Xmx2g
|
org.gradle.jvmargs=-Xmx4g -Xms2g
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableR8=false
|
android.enableR8=false
|
||||||
|
@ -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';
|
||||||
|
}
|
@ -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();
|
Loading…
Reference in new issue