最近朋友推荐gradle,发现确实是个不错的打包工具,决定用它做项目管理,当然最主要的还是用到它的批量打包功能。
零散的摸索了4,5天走了不少弯路,主要是gradle自身版本对应不同配置,新版本资料实在太少,走过来能跑通真的是要泪奔了,特记录下,大家少走弯路。
使用的版本:
引用
gradle-1.11
jdk7.0
eclipse Juno
项目结构:
引用
-game
---module1
---module2
game下主要有三个文件
1. local.properties
sdk.dir=E:\\adt-bundle-windows-x86_64-20130917\\sdk
2. settings.gradle
include ':module1'
include ':module2'
//指定子模块module1和module2的相对路径
project(':module1').projectDir = new File(settingsDir, '../module1Path')
project(':module2').projectDir = new File(settingsDir, '../module2Path')
3. build.gradle
buildscript
{
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
apply plugin: 'android'
dependencies {
compile project(':module1')
compile project(':module2')
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
//签名
signingConfigs {
myConfig {
storeFile file("xxx") //签名文件
storePassword "xxxx"
keyAlias "xxxx"
keyPassword "xxxxx" //签名密码
}
}
buildTypes{
release {
signingConfig signingConfigs.myConfig
//代码混淆--集成了Proguard,配置文件proguard.cfg网上有很多参考,我就不贴了
//注:我把某个jar包混淆了导致程序一直闪退
//开始以为是so文件加载失败,这个问题找了一天才找到 泪奔...
runProguard true
proguardFile 'proguard.cfg'
}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
//批量打包--指定配置文件
//不同的渠道商对应的各自AndroidManifest
//AndroidManifest的application标签只用配置渠道号的值
//其他公共配置都放在公共的AndroidManifest.xml中
selfTest {
manifest.srcFile 'product/AndroidManifest_selfTest.xml'
}
MMstore {
manifest.srcFile 'product/AndroidManifest_MMstore.xml'
}
instrumentTest.setRoot('tests')
}
//批量打包--声明
productFlavors {
selfTest {
//这里可以配置不同的包名
}
MMstore {
}
}
lintOptions {
abortOnError false
// if true, only report errors
ignoreWarnings true
}
//加载so文件
task copyNativeLibs(type: Copy) {
from fileTree(dir: 'libs', include: '**/*.so' ) into 'build/native-libs'
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniFolders = new HashSet()
pkgTask.jniFolders.add(new File(projectDir, 'build/native-libs'))
}
}
子Module的build.gradle很简单,我就贴一个出来就好:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9+'
}
}
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
instrumentTest.setRoot('tests')
}
lintOptions {
abortOnError false
// if true, only report errors
ignoreWarnings true
}
}
打包之前先
引用
gradle check
检查一遍,有问题就在build/link-result.html查看异常详情,里面的信息很详细。
check没有问题就直接打包,执行命令
引用
gradle clean build
几分钟后apk包就打好放在build/apk目录下面了