parent
5d8db16f37
commit
a903a55316
@ -1,4 +1,4 @@
|
||||
org.gradle.jvmargs=-Xmx2g
|
||||
org.gradle.jvmargs=-Xmx4g -Xms2g
|
||||
android.enableJetifier=true
|
||||
android.useAndroidX=true
|
||||
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