From cc2c4f19f82c8dfc8f5c3b83cd95c46adfa86d8a Mon Sep 17 00:00:00 2001 From: shmyga Date: Tue, 8 Oct 2019 17:35:30 +0300 Subject: [PATCH] [android] add sign task --- CHANGELOG.md | 14 ++++++++++---- haxetool/android.js | 30 ++++++++++++++++++++++++++++-- haxetool/core.js | 2 ++ haxetool/project.js | 10 +++++++--- package.json | 2 +- 5 files changed, 48 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9cfe28..92a3e4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,24 +1,30 @@ +0.1.1 +----- +* Android sign apk (config.key.store and config.key.pass params) + +0.1.0 +------ +* Android build +* Windows build +* Windows innosetup packer 0.0.18 ------ * Add meta.fps project param 0.0.12 ------- - +----- * Openfl android platform support * Android sdk module 0.0.11 ------ - * Added Neko module * FlashPlayer output with stream * Verbose output mode (--verbose) 0.0.10 ------ - * Windows compatibility * Change FlashPlayer download link * Use 'fs-extra' without 'mkdirp' and 'rmdir' diff --git a/haxetool/android.js b/haxetool/android.js index 641166e..b713529 100755 --- a/haxetool/android.js +++ b/haxetool/android.js @@ -1,4 +1,5 @@ const fs = require('fs'); +const os = require('os'); const path = require('path'); const exec = require('./exec'); const {StringWritable} = require('./tail'); @@ -89,12 +90,16 @@ class Android extends Sdk { }); } - aapt(args) { + buildTool(name) { let buildToolsVersion = null; fs.readdirSync(path.join(this.path, 'build-tools')).forEach(file => { buildToolsVersion = file; }); - const aaptBin = path.join(this.path, 'build-tools', buildToolsVersion, 'aapt'); + return path.join(this.path, 'build-tools', buildToolsVersion, name); + } + + aapt(args) { + const aaptBin = this.buildTool('aapt'); return exec('.', [aaptBin].concat(args).join(' ')); } @@ -191,6 +196,27 @@ class Android extends Sdk { })); }); } + + sign(keystore, keypass) { + const self = this; + return through.obj(function(file, enc, callback) { + self.log.i('sign *%s*', file.path); + const filename = path.join(os.tmpdir(), 'tmp.apk'); + fs.writeFileSync(filename, file.contents); + const cmd = [ + self.buildTool('apksigner'), + 'sign', + '--ks', keystore, + '--ks-pass', `pass:${keypass}`, + filename + ].join(' '); + exec('.', cmd).then(() => { + file.contents = fs.readFileSync(filename); + this.push(file); + callback(); + }); + }); + } } Android.ID = 'android'; diff --git a/haxetool/core.js b/haxetool/core.js index 765f443..b135019 100644 --- a/haxetool/core.js +++ b/haxetool/core.js @@ -46,6 +46,7 @@ class Config { mobileHeight: null, fps: 60, }; + this.key = null; if (params) { this.update(params); this.afterUpdate(); @@ -68,6 +69,7 @@ class Config { if (params.macros !== undefined) this.macros = this.macros.concat(params.macros); if (params.flags !== undefined) this.flags = this.flags.concat(params.flags); if (params.meta !== undefined) this.meta = {...this.meta, ...params.meta}; + if (params.key !== undefined) this.key = params.key; if (this.meta.icon) this.icon = Config.absolutePath(this.meta.icon); } diff --git a/haxetool/project.js b/haxetool/project.js index 5a7ee6f..8c9b491 100755 --- a/haxetool/project.js +++ b/haxetool/project.js @@ -103,8 +103,7 @@ class HaxeBuilder extends Builder { 'tools', 'platform-tools', 'build-tools;27.0.3', - //'platforms;android-19', - 'platforms;android-26', + 'platforms;android-28', //'ndk-bundle', 'lldb;3.1', 'cmake;3.6.4111459', @@ -125,7 +124,12 @@ class HaxeBuilder extends Builder { switch (this.buildSystem) { case BuildSystem.OPENFL: return this.haxe.openfl('build', this.platform, this.config, this.debug) - .then(result => streamToPromise(result.pipe(vfs.dest(target)))); + .then(result => { + if (this.platform === Platform.ANDROID && this.config.key) { + result = result.pipe(this.android.sign(this.config.key.store, this.config.key.pass)); + } + return streamToPromise(result.pipe(vfs.dest(target))); + }); case BuildSystem.HAXE: return this.haxe.build(this.platform, this.config, this.debug) .then(result => streamToPromise(result.pipe(vfs.dest(target)))); diff --git a/package.json b/package.json index 088573a..0cd208c 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gulp-haxetool", - "version": "0.1.0", + "version": "0.1.1", "description": "HaXe Tool for Gulp", "main": "index.js", "dependencies": {