一款构建工具,通过编写脚本,配合数量庞大的插件可以方便地修改工程文件内容。
准备
安装 grunt-cli
npm install -g grunt-cli
在工程根目录下添加package.json 和 Gruntfile
package.json:被npm用于存储项目的元数据,以便将此项目发布为npm模块。你可以在此文件中列出项目依赖的grunt和Grunt插件,放置于devDependencies配置段内
Gruntfile:此文件被命名为 Gruntfile.js 或 Gruntfile.coffee,用来配置或定义任务(task)并加载Grunt插件。
参数配置
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
}
任务编写
一份完整的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
有了grunt在打包时修改代码内容,下面介绍所使用打包工具Gradle。Gradle属于自动化构建工具,我们可以用它来进行依赖管理、代码混淆、应用签名等等,仅仅是写好配置文件就可以了。
准备
使用Android studio新建android工程时,默认就支持Gradle,新建成功后会下载Gradle。工程结构如下:

要使用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'
}
打包
在根目录下执行 ./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,复制到指定目录下并重命名。