| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #!/usr/local/bin/node
- const ora = require("ora");
- const request = require("request");
- const fs = require("fs");
- const path = require("path");
- const ProgressBar = require("progress");
- const spawn = require("cross-spawn");
- const parser = require("fast-xml-parser");
- const config = parser.parse(
- fs.readFileSync(path.resolve(__dirname, "config.xml")).toString(),
- { ignoreAttributes: false }
- );
- const post = (url, data) => {
- return new Promise((resolve, reject) => {
- request.post({ url, ...data }, (err, httpResponse, body) => {
- if (err) {
- reject(err);
- } else {
- resolve(body);
- }
- });
- });
- };
- const apkDir = path.resolve(
- __dirname,
- "platforms/android/app/build/outputs/apk/release/app-release.apk"
- );
- let spinner;
- function exec(cmd, args, options) {
- return new Promise((resolve, reject) => {
- var s = spawn(cmd, args, options);
- s.stdout.on("data", function (s) {});
- s.stderr.on("data", function (s) {
- //console.error(s.toString());
- //reject(s.toString())
- });
- s.on("close", (code) => {
- if (code == 0) {
- resolve();
- } else {
- reject();
- }
- });
- });
- }
- const cwd = path.resolve(__dirname);
- const vueDir = path.resolve(__dirname, "vue");
- spinner = ora("prepare").start();
- exec("cordova", ["prepare"], { cwd: cwd })
- .then((res) => {
- spinner.succeed("prepare success");
- spinner.start("building android apk");
- return exec(
- "cordova",
- [
- "build",
- "android",
- "--release",
- "--",
- `--keystore=${(path.resolve(__dirname), "zouma.jks")}`,
- "--storePassword=zouma123",
- "--password=zouma123",
- "--alias=zouma",
- ],
- { cwd: cwd }
- );
- })
- .then((res) => {
- spinner.succeed("apk build success");
- var bar = new ProgressBar(
- " uploading apk [:bar] :rateKb/s :percent :etas",
- {
- complete: "=",
- incomplete: " ",
- width: 20,
- total: fs.statSync(apkDir).size / 1000,
- clear: true,
- }
- );
- return post("http://api.bq04.com/apps/", {
- json: {
- type: "android",
- bundle_id: config.widget["@_id"],
- api_token: "b25f2b5fe65704df8b8b1fe866aaea05",
- },
- }).then((res) => {
- return Promise.all([
- post(res.cert.icon.upload_url, {
- formData: {
- key: res.cert.icon.key,
- token: res.cert.icon.token,
- file: fs.createReadStream(
- path.resolve(__dirname, "res/icon/android/icon-xxxhdpi.png")
- ),
- },
- }),
- post(res.cert.binary.upload_url, {
- formData: {
- key: res.cert.binary.key,
- token: res.cert.binary.token,
- file: fs
- .createReadStream(apkDir)
- .on("data", (chunk) => {
- bar.tick(chunk.length / 1000);
- }),
- "x:name": config.widget.name,
- "x:version": config.widget["@_version"],
- "x:build": config.widget["@_android-versionCode"],
- },
- }),
- ]);
- });
- })
- .then((res) => {
- spinner.succeed("apk upload success");
- console.log(res);
- })
- .catch((e) => {
- console.log(e);
- spinner.fail("fail");
- spinner.stop();
- });
|