如何使用gulp为离子应用设置APK的自动包装
我正在使用gulp与我的离子应用进行自动化。我已经设置了一个缩小我的JS,CSS,HTML文件的gulp过程并创建了一个构建目录。所以基本上我需要创建的Android APK但我有使用一饮而尽命令 如何使用gulp为离子应用设置APK的自动包装
- 创建一个build文件夹
www
:ionic cordova build --release android
- 使用的jarsigner来签名APK:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore HelloWorld-release-unsigned.apk alias_name
最后,我的APK准备就绪,我通过更新它的名称与其他版本参数将它复制到今天的日期文件夹中的某个位置。 当我们需要更频繁的构建来交付QA时,这非常耗时。
我的问题是现在我怎么才能创建一个使用gulp进程的一次性部署就绪APK?
我开发了一个梦幻般的解决方案,通过利用可用的方法和谷歌的一些不错的链接,即时创建签名的APK。
让我们走一步看一步
第1步:
准备好与吞气过程,minifies,并将所有CSS,JS,HTML文件,在build目录即WWW和验证Android平台已被添加到项目中。
第2步:
使用生成的应用程序的keystore
以下命令
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048
拷贝keystore
到项目的根。
第3步:
创建命名为build.json
在项目的根目录下的新文件,并添加以下行到它。同时创造keystore
{
"android": {
"debug": {
"keystore": "AnyName.keystore",
"storePassword": "password",
"alias": "AnyAliasName",
"password" : "password",
"keystoreType": ""
},
"release": {
"keystore": "AnyName.keystore",
"storePassword": "password",
"alias": "AnyAliasName",
"password" : "password",
"keystoreType": ""
}
}
}
步骤设置keystore
名和密码的细节,你已经进入4
在gulpfile.js
npm install --save-dev gulp-cheerio
npm install --save-dev gulp-util
npm install --save-dev gulp-if
npm install --save-dev run-sequence
npm install --save-dev gulp-rename
npm install --save-dev yargs
第5步中添加代码之前安装以下一饮而尽插件。
在gulpfile.js
中添加以下代码以创建APK &将其复制到今天的日期目录并重新命名。添加以下代码后好心添加build_app & release_task一饮而尽任务默认一饮而尽过程。
var if = require('gulp-if');
var runSequence = require('run-sequence');
var rename = require('gulp-rename');
// This plugin used to read XML file
var cheerio = require('gulp-cheerio');
// This is gulp utility plugin
var util = require("gulp-util");
// Used for executing any command line command
var exec = require('child_process').exec;
/**
* Command line options - defines whether this is a dev or release build
* e.g gulp -r or gulp -d. (gulp --release or gulp --develop)
* By default, just running 'gulp' is the same as running 'gulp -d'
*/
var args = require('yargs')
.alias('r', 'release')
.alias('d', 'develop')
.default('release', false)
.argv;
var release = args.release;
// Used to create directory with today's date
var releaseDirName = util.date('dd-mmm-yyyy');
// Default path where signed apk is created
APK_PATH = './platforms/android/build/outputs/apk/android-release.apk'
APK_NAME = "<YOUR_APP_NAME>";
// The following popup is used to give popup notification in windows when APK is ready
var WINDOWS_POPUP = "msg * MESSAGE";
// This command creates the signed APK using configuration in build.json
var ANDROID_SIGNED_APK_COMMAND = 'cordova build android --release --buildConfig';
/**
* Create signed APK
*/
gulp.task('build_app', function (cb) {
if(args.signedAPK){
console.log('Building signed apk...');
exec(ANDROID_SIGNED_APK_COMMAND,
{
cwd : './',
maxBuffer: 1024 * 1024
},
function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
});
}
}
/**
* Common function for executing commands
* @param cmd
* @param cb
* @returns
*/
function execCMD(cmd, cb){
exec(cmd,
{
cwd : './',
maxBuffer: 1024 * 1024
},
function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
if(err){
cb(err);
}else{
cb();
}
});
}
/**
* Reads XML file for getting version
*/
gulp.task('config_xml', function() {
return gulp.src('./config.xml')
.pipe(cheerio({
run: function ($) {
// set app version number
APK_NAME += '_' + $('widget').attr('version');
},
parserOptions: {
xmlMode: true
}
}))
.pipe(gulp.dest('./'));
});
/**
* release task
*/
gulp.task('releaseTask',function(callback) {
if(args.signedAPK){
runSequence(
'copyAPK',
callback
)
}
});
/**
* Rename android apk
*/
gulp.task('copyAPK',function(callback) {
return gulp.src(APK_PATH)
.pipe(if(args.signedAPK,rename(APK_NAME)))
.pipe(gulp.dest(releaseDirName + '/Android/'))
.on('end', function(){
util.log(util.colors.green('Good Job! Your APK is ready at following location : ') + util.colors.cyan(releaseDirName + '/Android/' + APK_NAME))
execCMD(WINDOWS_POPUP.replace('MESSAGE','Good Job! Your APK is ready at following location : ' + releaseDirName + '/Android/' + APK_NAME), function(err){})
});
});
第6步:
创建任何名称的bat文件。我曾与Signed APK <My Project Name>.bat
认沽按照bat文件代码中创建它。
cd /d %~dp0
gulp --release --signedAPK
cmd.exe
将此bat文件保存在项目的根目录中。
cd /d %~dp0
上述代码跳转到bat文件所在的目录。
gulp --release --signedAPK
和上面的一个创造签署的Android APK的的。
第7步:
不要等到什么...请转到项目,然后双击bat文件,这就是它......的签名APK将等待着你在今天的日期文件夹在项目中。
我收到了'args'变量错误。任何关于它的想法。 –
对不起,我没有提到加载“yargs”节点mobule。我已经更新了答案。请立即检查。只要安装“yargs”模块,并在你的'gulpfile.js'使用 –