翻译自stackoverflow
转载请注明
一个最基本的build.gradle 文件
这是一个默认的一个模块的build.gradle
apply plugin: 'com.android.application'
android {
signingConfigs {
applicationName {
keyAlias 'applicationName'
keyPassword 'password'
storeFile file('../key/applicationName.jks')
storePassword 'anotherPassword'
}
}
compileSdkVersion 24
buildToolsVersion '24.0.1'
defaultConfig {
applicationId 'com.company.applicationName'
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName '1.0'
signingConfig signingConfigs.applicationName
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.android.support:design:24.1.1'
testCompile 'junit:junit:4.12'
}
DSL(domain-specific language)
在这个文件里的每一个块成为一个DSL
Plugins
第一行,apply plugin: 'com.android.application'
应用安卓插件G绕到了去构建项目,使得android {}
可以去指定安卓构建选项
android {…}
这个模块是也是一个安卓DSL,这个DSL包含了你的项目的信息。它的子模块defaultConfig
,持有了你的清单文件的默认值。你可以稍后重写它。
Dependencies
这个dependencies
指定了你的应用里想引入哪些外部的库(通常是Android库,当然了Java库也可以,比如说Gson)。Gradle会自动下载这些依赖,你只需要加上compile
当你想使用别的库。例子
`compile ‘com.android.support:design:24.1.1’
`
这一行就好像在说“给我的安卓应用加上设计支持库”。Gradle会保证这个库下载,并且可以使用。它的代码也会引入到你的app里。
如果一熟悉Maven,Maven的语法是 GroupId:ArtifactId:版本号,可以让你完全控制享用那个版本。
当然你也可以指定artifact的版本通过使用+号,但现实是最好不要这样做,因为有可能库会会更新,有些更新你可能还不知道,这就会导致问题。
注意:v7是appcompat-v7
compile 'com.android.support:appcompat-v7:24.1.1
最简单的意思就是这个库(Appcompat)在Api7以后才行。
指定不同构建方式的依赖
你可以指定一个依赖,这个依赖只能在特定的构建方式下才能用(比如debug,test或者release)。可以通过使用debugCompile, testCompile or releaseCompile而不是通用的compile
这个可以保证你的app尽可能的小,并且任何debug的信息都不能被用作去获得你app的核心信息。
签名配置
signingConfig 允许你为Gradle配置包含keystore的信息,保证在构建应用的时候会使用这些配置,然后正确的签名。
注意:不推荐在你的Gradle文件里写签名的配置。
在你的签名配置中你可以指定:
- storeFile:keystore文件
- storePassword:keystore的密码
- keyAlias:key 的别名
- keyPassword:key别名的密码
可以定义signingConfigs 块去 配置
android {
signingConfigs {
myConfig {
storeFile file("myFile.keystore")
storePassword "myPasswork"
keyAlias "aKeyAlias"
keyPassword "myAliasPassword"
}
}
//....
}
附录:通过示例代码深入理解Dsl
/**
* 不说了,上面有
*/
apply plugin: 'com.android.application'
/**
* 在android {} block 里去配置所有构建的选项。
*/
android {
/**
* compileSdkVersion 之情了Gradle需要使用的API版本去编译你的app,这意味着你的app可以使用Api版本以及以下的功能。
*
* buildToolsVersion 指定了SDK build tools的版本,命令行工具以及Gradle将会使用的编译器。你需要通过SKD Manager去下载build tools
*/
compileSdkVersion 23
buildToolsVersion "23.0.3"
/**
* 在defaultConfig {} 里包含了默认的设置和所有构建变量的实体,可以动态的重写清单文件的一些属性。,你可以为了你的不同版本去配置product flavor去重写这些值。
*/
defaultConfig {
/**
* 应用唯一的id,在打包和发布时候会用到。你的代码应该是定义在清单文件中的包名
*/
applicationId 'com.example.myapp'
// 最小的版本.
minSdkVersion 14
// 测试版本
targetSdkVersion 23
// 版本号
versionCode 1
// 用户看到的版本号
versionName "1.0"
}
/**
* 在 buildTypes {} 这里你可以配置多个build type。默认的,构建系统定义了两种模式:debug和release。debug迷失不是显示的展示默认的构建参数,但包含了debugging工具和debug key。release版本应用Proguard 设置,默认没有被签名
*/
buildTypes {
/**
* 默认的, Android Studio 配置的是release,确保代码的压缩,使用minifyEnabled,之情proguard设置文件
*/
release {
minifyEnabled true // 确保代码的压缩
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
/**
* 在 productFlavors {} 模块 你可以配置多个productFlavors ,这个允许你可以创建不同版本的app,这些app可以分别重写 各自的defaultConfig {}。productFlavors 是可选项,编译系统不会默认的去创建他们,下面的例子创建了一个free and paid flavor。每一个 profuct flavor之情了各自的application Id,所以他们都能存在在Google Play 商店、安卓设备上。
*/
productFlavors {
free {
applicationId 'com.example.myapp.free'
}
paid {
applicationId 'com.example.myapp.paid'
}
}
}
/**
* dependencies {} 在module层的配置只指定了这个模块所需要的依赖
*/
dependencies {
compile project(":lib")
compile 'com.android.support:appcompat-v7:24.1.0'
compile fileTree(dir: 'libs', include: ['*.jar'])
}