gradle配置教程
本文翻译自官方提供的gradle文档,翻译有不足之处多谢大家指出。
原文地址:http://developer.android.com/tools/building/configuring-gradle.html#workBuildVariants
gradle基础结构
android studio项目包含了一个最高级别的构建文件和每个模块的构建文件。那些构建文件叫做build.gradle,并且他们是全文本文件,基于正对Gradle的android插件的Groovy语法来配置的。很多情况下,你只要编辑处于app目录下的build文件。例如,在一个app模块下的构建文件可以像如下的形式:
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile project(":lib")
compile 'com.android.support:appcompat-v7:19.0.1'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
apply plugin: ‘com.android.application’ 声明这是个android项目,使得gradle按照android的方式去构建。这个将android特定的构建任务加到最顶层top-level构建任务并且使得android {…}元素可已使用来指定android的构建选项。
android {…}是用来配置所有的android构建的选项的。
- compileSdkVersion属性指定编译的目标版本
buildToolsVersion属性来指定用那个build tools来使用,如果要装多个版本的build tools的话可以使用SDK Manager。
Note:一般来说总是使用一个构建工具的版本的版本是高于或者定于你的编译目标和目标的SDK
defaultConfig 属性用来动态的配置来自核心设置和在manifest文件(AndroidManifest.xml)的设置。这个defaultConfig的值会重写那些在manifest file中的值。这个在defaultConfig中的属性对于所有的build 变量都生效,除非那些重写其中一些值的build变量。(The configuration specified in the defaultConfig element applies to all build variants, unless the configuration for a build variant overrides some of these values.)
buildTypes属性用来控制如何去构建并且打包你的app,默认情况下,这个构建系统定义了两种类型:debug和release。debug构建类型包括debugging符号和符号为debug key。这个release类型默认情况下是没有符号的。在示例中配置文件为release版本用ProGuard作为符号。
dependencies这个属性是在android元素外面的,这个元素声明了模块的依赖。下面章节将介绍dependencies这个属性。
Note:当你对你的项目中的build文件作出改变后,android studio要求项目区sync来导入你的配置的变化,点击Sync Now然后你的项目才能应用你的配置的变化。
声明依赖dependencies
下面的app模块在例子中声明了三个依赖
dependencies {
// Module dependency
compile project(":lib")
// Remote binary dependency
compile 'com.android.support:appcompat-v7:19.0.1'
// Local binary dependency
compile fileTree(dir: 'libs', include: ['*.jar'])
}
下面来介绍下依赖的描述,这个构建系统在所有的构建依赖钱都交了compile关键字来给编辑的(compilation)路径并且将它们包含在最后的包中。
Module dependencies
app 模块依赖于lib 模块,因为MainActivity 启动LibActivity1,具体描述在Open an Activity from a Library Module
Remote binary dependencies
app 和 lib 模块都使用来自Android Support Library中的ActionBarActivity类,所以这些模块都依赖它。
compile ‘com.android.support:appcompat-v7:19.0.1’声明了一个在Android Support Library的版本号为19.0.1的依赖通过制定它的Maven同等物(coordinates)。这个Android Support Library 可以在android SDK中的仓库中找到。如果你的没有那就在SDK manager中下载。
Android Studio默认使用Maven 的仓库,在最顶级的build文件中有指定。
Local binary dependencies
有一些模块不适用任何的来自本地文件系统的二进制依赖,如果你有模块要求本地的二进制依赖,那就将这些依赖的JAR文件复制到你项目中的/libs下。
compile fileTree(dir: ‘libs’, include: [‘*.jar’])告诉构建系统任何子啊app/libs下的JAR文件都是一个依赖并且应该将这个编译路径包括在最后的包中。
关于更多的关于Gradle的依赖的信息可查看Dependency Management Basics.
Run ProGuard
这个构建系统可以运行ProGuard模式来在你的构建过程中混淆你的代码,在BuildSystemExample中,改变app中的构建文件来为release模式运行ProGuard。
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
getDefaultProguardFile(‘proguard-android.txt’)获得默认的ProGuard的设置从一家安装的Android SDK中,Android Studio 吧定义具体的模块规则定义文件proguard-rules.pro加载了这个模块的根下,在这里你可以加入一些普通的ProGuard 规则。
Application ID for package identification
通过android 构建系统,这个applicationId属性被用来唯一指定应用的发布的包名,这个application ID实在app的build.gradle文件中指定的。
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "19.1"
defaultConfig {
applicationId "com.example.my.app"
minSdkVersion 15
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
...
Note:这个applicationId只在你的build.gradle文件中指定,并不在AndroidManifest.xml文件。
当使用构建变量时,这个构建系统使你能够唯一的指定每一个产品的风格和构建类型,这个application ID作为前缀被加到指定的产品风格中。
productFlavors {
pro {
applicationId = "com.example.my.pkg.pro"
}
free {
applicationId = "com.example.my.pkg.free"
}
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
这个包名仍旧必须被在manifest文件中被指定,这会在你的R Class被引用并且被用来解析任何相关的activity和service注册。
package="com.example.app">
Note:如果你有多个manifests,这个包名对于这些manifests是可选的。如果它是在这些manifests中被指定的,这个包名必须根据src/main/文件夹在manifest中被指定的包名来辨识。
有空再翻译。。。