| Version 13 (modified by liaojiaohe, 12 years ago) (diff) |
|---|
参考
gradle中英文 http://gradle.org/ http://doc.gradle.cn/wiki/gradle-main?hl=main
项目转换为gradle http://tools.android.com/tech-docs/new-build-system/intellij_to_gradle
gradle android 详细说明 http://tools.android.com/tech-docs/new-build-system/user-guide
多渠道打包 http://www.cnblogs.com/youxilua/archive/2013/05/20/3087935.html
常用配置
apply plugin: 'java': 指定项目为java项目
apply plugin: 'android' 指定为android项目
apply plugin: 'android-library':增加android库项目
常用命令
gradle -q quite模式,出错才输出
gradle tasks --all 列出所有任务
gradle projects 列出当前目录下所以项目
gradle :app:tasks 例如 gradle test:assemble 运行test项目assemble任务,相关前置任务会检查一次
例子
以聚超值为例子,因为要多个项目构成,需要settings.gradle 这个文件 , 参考
settings.gradle
include ':pcgCommon', ':Juchaozhi'
local.properties ,用于配置sdk.dir
sdk.dir=/Volumes/DATA/tools/android-sdk-macosx
root项目下有两个项目 pcgCommon和Juchaozhi
root 项目build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
pcgCommon build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
}
}
apply plugin: 'android-library'
android {
compileSdkVersion 17
buildToolsVersion = 20
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')
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
lintOptions {
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
juchaozhi 项目build.gradle
apply plugin: 'android'
android {
compileSdkVersion 17
buildToolsVersion = 20
useOldManifestMerger true
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')
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
lintOptions {
abortOnError false
}
}
signingConfigs {
myConfig{
storeFile file("${rootDir}/keystore/xxxxx.keystore")
storePassword "xxxxx"
keyAlias "pcgroup"
keyPassword "xxxxx"
}
}
buildTypes{
release {
signingConfig signingConfigs.myConfig
// runProguard true
// proguardFiles getDefaultProguardFile('proguard-android.txt')
}
}
def markets = (new File("${rootDir}/keystore/market.config").text).split("\n")
productFlavors {
markets.each { name ->
"$name" {
}
}
}
String fileContents = new File("${projectDir}/AndroidManifest.xml").text
def m = fileContents =~ /android:versionName="(.*)"/
def version = m[0][1]
//println version
applicationVariants.all{ variant ->
def market = variant.productFlavors[0].name;
variant.processManifest.doLast{
copy{
from("${projectDir}/AndroidManifest.xml")
into("${buildDir}/manifests/$variant.name")
filter{
String line -> line.replaceAll("MOFANG_CHANNEL_VALUE", "$market")
}
variant.processResources.manifestFile = file("${buildDir}/manifests/${variant.name}/AndroidManifest.xml")
}
}
def apk = variant.packageApplication.outputFile;
def newName = apk.name.replace("-" + market, "_" + version + "_" + market);
newName = newName.replace("-release", "");
variant.packageApplication.outputFile = new File(apk.parentFile, newName);
if (variant.zipAlign) {
newName = newName.replace("unaligned//", "");
variant.zipAlign.outputFile = new File(apk.parentFile, newName.replace("-unaligned", ""));
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':pcgCommon')
}
注意事项
- 要注意有些旧项目的AndroidManifest.xml不符合新的规范要加上 useOldManifestMerger true 这个参数
- 检查的时候有问题也跳过
lintOptions {
abortOnError false
}
- runProguard true 代码混淆的选项 参考
- 市场列表文件用Unix回车分割,用其他分割修改这里 split("\n")
- 版本信息用正则匹配 AndroidManifest?.xml 这个文件
- 市场替换的代码 line.replaceAll("MOFANG_CHANNEL_VALUE", "$market"),设置manifestFile文件 variant.processResources.manifestFile
- 只编译release 可以采用 gradle assembleRelease
![(please configure the [header_logo] section in trac.ini)](http://www1.pconline.com.cn/hr/2009/global/images/logo.gif)