Android Studio
&
Gradle
基础
为什么选择Gradle
- 采用基于Groovy的DSL语言(Domain Specific Language领域特定语言)来描述和控制构建逻辑。
- 类似Ant和Maven,完全支持 Maven 、 Ivy 的资源库
- 相对Maven而言提供了更多的可选项,甚至可以使用一个普通的文件夹作为资源库,而仍可拥有依赖传递的特性
- 良好的API工具供IDE集成。
Gradle是一个优秀的构建系统和构建工具,它允许通过插件创建自定义的构建逻辑。 Google基于Gradle以下的一些特点而选择了它:
Android采用Gradle
作为新构建系统的目标
- 让重用代码和资源变得更加容易。
- 让创建同一应用程序的不同版本变得更加容易,无论是多个apk发布版本还是同一个应用的不同定制版本。
- 让构建过程变得更加容易配置,扩展和定制。
- 整合优秀的IDE
开始
- Groovy(基于JVM,非常类似Java的一门高级语言)
- build.gradle、task(dependsOn、defaultTasks)
- Java plugin(archivesBaseName、version)
-
repositories、dependencies
应用:多渠道包
- 使用flavor实现多渠道打包
- 使用flavorGroups实现批量配置(一个包名,多个icon)
1.1 同一项目打包引用不同资源
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 18
buildToolsVersion "18.0.1"
defaultConfig {
minSdkVersion 15
targetSdkVersion 18
}
productFlavors {
production {
packageName "be.tamere.gradlebuildtypesexample"
}
staging {
packageName "be.tamere.gradlebuildtypesexample.staging"
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:18.0.0'
}
├── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher-web.png
│ ├── java
│ │ └── be
│ │ └── tamere
│ │ └── gradlebuildtypesexample
│ │ └── MainActivity.java
│ └── res
│ ├── drawable-hdpi
│ │ └── ic_launcher.png
│ ├── drawable-mdpi
│ │ └── ic_launcher.png
│ ├── drawable-xhdpi
│ │ └── ic_launcher.png
│ ├── drawable-xxhdpi
│ │ └── ic_launcher.png
│ ├── layout
│ │ └── activity_main.xml
│ ├── menu
│ │ └── main.xml
│ ├── values
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-v11
│ │ └── styles.xml
│ └── values-v14
│ └── styles.xml
├── production
│ └── java
│ └── be
│ └── tamere
│ └── gradlebuildtypesexample
│ └── Constants.java
└── staging
├── java
│ └── be
│ └── tamere
│ └── gradlebuildtypesexample
│ └── Constants.java
└── res
├── drawable-hdpi
│ └── ic_launcher.png
├── drawable-mdpi
│ └── ic_launcher.png
├── drawable-xhdpi
│ └── ic_launcher.png
├── drawable-xxhdpi
│ └── ic_launcher.png
└── values
└── string.xml
1.2 实现不同API分支版本

1.3 代码实现友盟多渠道版本
//替换AndroidManifest.xml的UMENG_CHANNEL_VALUE字符串为渠道名称 By Remex Huang
android.applicationVariants.all{ variant ->
variant.processManifest.doLast{
//${buildDir}是指./build文件夹
//${variant.dirName}是flavor/buildtype,例如GooglePlay/release,运行时会自动生成
//下面的路径是类似这样:./build/manifests/GooglePlay/release/AndroidManifest.xml
def manifestFile = "${buildDir}/manifests/${variant.dirName}/AndroidManifest.xml"
//将字符串UMENG_CHANNEL_VALUE替换为当前 ProductFlavor 的名字
def updatedContent = new File(manifestFile).getText('UTF-8')
.replaceAll("UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}")
new File(manifestFile).write(updatedContent, 'UTF-8')
//将此次flavor的AndroidManifest.xml文件指定为我们修改过的这个文件
variant.processResources.manifestFile =
file("${buildDir}/manifests/${variant.dirName}/AndroidManifest.xml")
}
}
参考:友盟多渠道打包配置
2. 实现一个包名多个icon
flavorGroups
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
flavorGroups "suit", "number"
defaultConfig {
minSdkVersion 7
targetSdkVersion 19
}
productFlavors {
//number flavours
ace {
flavorGroup "number"
}
two {
flavorGroup "number"
}
three {
flavorGroup "number"
}
four {
flavorGroup "number"
}
five {
flavorGroup "number"
}
six {
flavorGroup "number"
}
seven {
flavorGroup "number"
}
eight {
flavorGroup "number"
}
nine {
flavorGroup "number"
}
ten {
flavorGroup "number"
}
jack {
flavorGroup "number"
}
queen {
flavorGroup "number"
}
king {
flavorGroup "number"
}
clubs {
flavorGroup "suit"
}
spades {
flavorGroup "suit"
}
diamonds {
flavorGroup "suit"
}
hearts {
flavorGroup "suit"
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:+'
}
4 suits x 13 numbers = 52 apks
Android Studio
开始
- 创建项目、创建依赖项目、添加依赖包,查看build.gradle、tasks视图、控制台、终端操作gradlew
- 常规使用:项目结构、svn操作、快捷键(参考)
- 智能提示(参考、关注Philippe Breault)
- 建议先使用IntelliJ Idea熟悉环境(注意与eclipse差异:项目依赖的不同)
- 慢慢用,慢慢熟

显示内存占用情况









自动完成
调试时追加日志

调试时追加条件

Android Studio&Gradle
By Joker
Android Studio&Gradle
- 1,412