Android 中的Gradle

来源:互联网 发布:老王python培训 编辑:程序博客网 时间:2024/06/06 15:35

翻译自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'])}
1 0