rainbow-android-app

自动化打包工具

  • Grunt

    一款构建工具,通过编写脚本,配合数量庞大的插件可以方便地修改工程文件内容。

    1. 准备

      • 安装好npm、Node.js。
      • 安装 grunt-cli

        npm install -g grunt-cli

      • 在工程根目录下添加package.json 和 Gruntfile

        package.json:被npm用于存储项目的元数据,以便将此项目发布为npm模块。你可以在此文件中列出项目依赖的grunt和Grunt插件,放置于devDependencies配置段内

        Gruntfile:此文件被命名为 Gruntfile.js 或 Gruntfile.coffee,用来配置或定义任务(task)并加载Grunt插件。

    2. 参数配置

      package.json中出了声明依赖的grunt插件,还可以向tast中添加参数。例如:

       "server_dev": {
           "httphost": "112.124.98.136",
           "httpport": 7100,
           "avatarhost": "112.124.98.136",
           "mqtthost": "112.124.98.136",
           "mqttport": 1983
           },
       "server_pro": {
           "httphost": "115.29.189.176",
           "httpport": 7100,
           "avatarhost": "115.29.189.176",
           "mqtthost": "115.29.189.176",
           "mqttport": 1983
       },
       "delta": {
           "basevc": 200,
           "deltavc": 200,
           "vn": "2.0.0.1508121242",
           "crosswalk": true,
           "server": "pro",
           "auto": false
       }
      
    3. 任务编写

      一份完整的Gruntfile文件包括:

       module.exports = function(grunt) {
      
           // Project configuration.
           grunt.initConfig({
               pkg: grunt.file.readJSON('package.json'),
               delta:grunt.file.readJSON('./package.json').delta,
               replace: {
                   build_gradle: {
                       src: 'android/build.gradle',
                       overwrite: true,
                       replacements: [{
                           from: /versionCode.*/,
                           to: 'versionCode <%= delta.deltavc %>'
                       }, {
                           from: /versionName.*/,
                           to: 'versionName \'<%= delta.vn %>\''
                       }]
                   },
               }
           });
      
           // 加载包含 "replace" 任务的插件。
           grunt.loadNpmTasks('grunt-text-replace');
      
           // 默认被执行的任务列表。
           grunt.registerTask('default', ['replace:build_gradle']);
      
       };
      

      4.执行任务

      在Gruntfile所在目录命令行执行grunt即可运行默认的“default”任务。

       grunt
      
  • Gradle

    有了grunt在打包时修改代码内容,下面介绍所使用打包工具Gradle。Gradle属于自动化构建工具,我们可以用它来进行依赖管理、代码混淆、应用签名等等,仅仅是写好配置文件就可以了。

    1. 准备

      使用Android studio新建android工程时,默认就支持Gradle,新建成功后会下载Gradle。工程结构如下:

      gradle-files

      要使用gradle主要需要两种.gradle文件:

      • settings.gradle

        声明用到的各个module。如下所示:

        include ':android', ':crosswalk', ':cordova'
        project(':crosswalk').projectDir = new File('third_party/crosswalk')
        project(':cordova').projectDir = new File('third_party/cordova')
        
      • build.gradle

        根目录下:

        配置对整个工程生效:

        // Top-level build file where you can add configuration options common to all sub-projects/modules.
        
        buildscript {
          repositories {
              jcenter()
          }
        
          dependencies {
              classpath 'com.android.tools.build:gradle:1.0.0'
        
              // NOTE: Do not place your application dependencies here; they belong
              // in the individual module build.gradle files
          }
        }
        
        allprojects {
          repositories {
              jcenter()
              mavenCentral()
          }
        }
        

        单独模块下:

        apply plugin: 'com.android.application'
        
        android {
          compileSdkVersion 22
          buildToolsVersion "22.0.1"
        
          defaultConfig {
              applicationId "com.example.jiu.myapplication"
              minSdkVersion 15
              targetSdkVersion 22
              versionCode 1
              versionName "1.0"
          }
          buildTypes {
              release {
                  //开启代码混淆
                  minifyEnabled true
                  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
              }
          }
          sourceSets {
              main {
                  //在编译时加入.so文件
                  jniLibs.srcDirs = ['libs']
              }
          }
        }
        
        //依赖声明
        dependencies {
          compile fileTree(dir: 'libs', include: ['*.jar'])
          compile 'com.android.support:appcompat-v7:22.2.0'
        }
        
    2. 打包

      在根目录下执行 ./gradlew build即可,打包完成后在 build/outputs/apk目录下生成android-production-release.apk。

      配合grunt使用,在工程构建结束后执行task:

       ```
       exec: {
           gradle_build: {
               command: './gradlew build'
           }
       },
       copy: {
           apk_pro: {
               src: 'android/build/outputs/apk/android-production-release.apk',
               dest: 'out/Rainbow_V<%= delta.vn %>.apk'
           }
       }
       ```
      

      用于打包apk,复制到指定目录下并重命名。