2017-09-01 31 views
0

我正在使用gulp與我的離子應用進行自動化。我已經設置了一個縮小我的JS,CSS,HTML文件的gulp過程並創建了一個構建目錄。所以基本上我需要創建的Android APK但我有使用一飲而盡命令 如何使用gulp爲離子應用設置APK的自動包裝

  • 執行命令來創建發佈版本做以下的事情

    1. 創建一個build文件夾wwwionic cordova build --release android
    2. 使用的jarsigner來簽名APK:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore HelloWorld-release-unsigned.apk alias_name

    最後,我的APK準備就緒,我通過更新它的名稱與其他版本參數將它複製到今天的日期文件夾中的某個位置。 當我們需要更頻繁的構建來交付QA時,這非常耗時。

    我的問題是現在我怎麼才能創建一個使用gulp進程的一次性部署就緒APK?

  • 回答

    3

    我開發了一個夢幻般的解決方案,通過利用可用的方法和谷歌的一些不錯的鏈接,即時創建簽名的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將等待着你在今天的日期文件夾在項目中。

    +0

    我收到了'args'變量錯誤。任何關於它的想法。 –

    +0

    對不起,我沒有提到加載「yargs」節點mobule。我已經更新了答案。請立即檢查。只要安裝「yargs」模塊,並在你的'gulpfile.js'使用 –

    相關問題