Module build.gradle

Android Studio自动创建的module默认生成了build.gradle文件。

  1. apply plugin: 'com.android.application'
  2.  
  3. android {
  4. compileSdkVersion 23
  5. buildToolsVersion "23.0.2"
  6.  
  7. defaultConfig {
  8. applicationId "com.xys.gradletest"
  9. minSdkVersion 14
  10. targetSdkVersion 23
  11. versionCode 1
  12. versionName "1.0"
  13. }
  14. buildTypes {
  15. release {
  16. minifyEnabled false
  17. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  18. }
  19. }
  20. }
  21.  
  22. dependencies {
  23. compile fileTree(dir: 'libs', include: ['*.jar'])
  24. testCompile 'junit:junit:4.12'
  25. compile 'com.android.support:appcompat-v7:23.1.1'
  26. }

这里的信息就比项目全局的build.gradle文件复杂多了。但前面提到了,Gradle使用的是DSL语言,即领域特定语言。它是针对某个领域所设计出来的特定的语言,因为有了领域的限制,要解决的问题就被划定了范围。因此在理解的时候,只需要针对每个特定的领域进行分析即可。

apply plugin领域

apply plugin这块领域描述了Gradle所引入的插件。

  1. apply plugin: 'com.android.application'

表示该module是一个Android Application。这个插件里面包含了Android项目相关的所有工具。

android领域

android{……}这块领域描述了该Android module构建过程中所用到的所有参数。默认情况下,IDE自动创建了compileSdkVersion、buildToolsVersion两个参数,分别对应编译的SDK版本和Android build tools版本。而在android领域内,系统还默认创建了两个领域——defaultConfig和buildTypes,这两个领域后面会再进行具体解释。

dependencies领域

dependencies{……}这块领域描述了该Android module构建过程中所依赖的所有库,库可以是以jar的形式进行依赖,或者是使用Android推荐的aar形式进行依赖。aar相对于jar具有不可比拟的优势,不仅配置依赖更为简单,而且可以将图片的资源文件放入aar中供主项目依赖,几乎等于依赖了源码。Gradle对于依赖关系的处理,就是向调用者屏蔽所有的依赖关系,主项目只需要依赖该aar库项目,而不需要知道aar项目对于其他库的依赖,这正是Gradle的设计哲学之一。

如何进一步了解这些领域

初学者看见这么多的脚本语法,可能已经很头疼了。的确这么多的配置、语法,绝不是一朝一夕可以记住的。这时候文档的作用就体现出来了,借助Android Gradle DSL的文档(地址为http://google.github.io/android-gradle-dsl/current/index.html),开发者就可以随时查找文档,找到相关的信息,通过这些文档API来编写自己的功能。例如前面笔者提到的这些领域都可以在文档中找到其所有的参数,如图4.2所示。

Module build.gradle - 图1 图4.2 Gradle文档

再比如,要查看BuildType的相关API,如图4.3所示。

Module build.gradle - 图2 图4.3 Gradle API

这个才是开发者了解Gradle的最佳方式。不管是哪个领域、里面有哪些配置、有什么作用,全部可以找到,而且是官方的文档。