Android学习笔记|Chapter2:Android下Gradle的基本自定义构建

Chapter2:Gradle基本自定义构建
文章目录

  • Chapter2:Gradle基本自定义构建
    • 2.1 Gradle文件结构
    • 2.2 任务入门
    • 2.3 自定义构建
    • 2.4 加快Gradle 编译速度
    • 2.5 参考资料

2.1 Gradle文件结构 Android学习笔记|Chapter2:Android下Gradle的基本自定义构建
文章图片

  • settings.gradle:该文件在初始化阶段被执行,定义了哪些模块应该包含在构件内。对于只包含一个Android应用的新项目,文件内容为 include ‘:app’。单模块项目并不需要该文件,多模块项目必须定义该文件。
  • 顶层build.gradle:
    //实际构建代码块 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.4.2' } }allprojects { repositories { jcenter() } }

    • repositories代码块:将jcenter配置成一个仓库。
    • dependencies代码块:配置构建过程中的依赖包(不能讲应用或依赖项目所需的依赖包包含在顶层构建文件中)。默认之定义了一个依赖包:Gradle的Android插件(每个Android模块都需要有Android插件)。
    • allprojects代码块:声明需要被用于所有模块的属性。(甚至可以创建任务,该任务会被运用到所有模块;使用了allprojects会使模块耦合到项目,导致没有主项目构建稳健情况下,无法独立建构模块,会影响分类内部依赖库的操作。)
  • 模块层build.gradle:
    //代码节选 apply plugin: 'com.android.application'android { compileSdkVersion 28 buildToolsVersion '28.0.3'defaultConfig { applicationId "com.virtual.learn191024" minSdkVersion 24 targetSdkVersion 28 versionCode 1 versionName "1.0" } }dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.1.0' }

    • 模块层build.gradle文件的属性只能应用在该模块,可以覆盖顶层build.gradle文件定义的属性。
    • apply plugin:使用Android应用插件。(使用该插件后便可以使用android代码块中的特有配置。)
    • android代码块:包含Android特有配置,必须配置的属性有:
      • compileSdkVersion :编译应用的 Android API 版本。
      • buildToolsVersion :构建工具和编译器使用的版本号。
    • defaultConfig代码块:配置应用的核心属性。可以覆盖AndroidManifest.xml文件中对应的条目。
      • applicationId:Google Play 唯一标识。
      • minSdkVersion:运行应用最小API级别。
      • targetSdkVersion:通知系统已在特定Android版本通过测试,不必启动向前兼容的行为。
      • versionCode:版本号
      • versionName:友好的版本名称
    • dependencies代码块:依赖代码块。
2.2 任务入门
  • 命令 $ gradle tasks:打印出所有可用的任务。
  • 命令 $ gradle tasks --all:打印出所有可用的任务,并显示它们之间的依赖。
  • 补充参数:-m或**–dry-run** 试运行。
  • Gradle的Android插件使用了Java基础插件;Java基础插件使用了基础插件。基础插件添加了任务的标准生命周期和一些共同约定的属性。基础插件定义了assemnle和clean任务;Java插件定义了check和buildtasks。在基础插件中,任务不被实现和执行操作,而是被用来定义插件之间的约定。
    • assemble:集合项目的输出。
    • clean:清理项目的输出。
    • check:运行所有的检查,通常是单元测试和集成测试。
    • build:同时运行assemble和check。
  • Android任务:Android插件扩展了基本任务,并实现了它们的行为。
    • assemble:为每个构建版本创建一个APK。
    • clean:删除所有的构建内容,比如APK文件。
    • check:运行Lint检查,Lint发现问题后终止构建。
    • build:同时运行assemble和check。
    assemble任务依赖于assembleDebug和assembleRelease(也可能包含更多构件类型),assemble将处罚所有依赖的构件类型进行构建操作。
  • Android插件一些新的任务:
    • connectedCheck:在连接设备或模拟器上运行测试。
    • deviceCheck:一个占位任务,为其他插件在远端设备上运行测试。
    • installDebug和installRelease:在连接的设备或模拟器上安装特定版本。
    • 所有的installtasks都会有相关的uninstall任务。
  • 构建任务依赖于check而非connectedCheck或deviceCheck。
  • 运行check任务会生成一份Lint报告,Lint报告会包含所有的警告和错误,以及一份详细的说明和一个相关文档的连接。存储在**app/build/reports/**文件夹下。
2.3 自定义构建
  • 补充一些通过构建配置的属性:
    • testApplicationId:针对instrument测试APK的applicationId。
    • testInstrumentationRunner:JUnit测试运行器的名称,被用来运行测试。
    • signingConfig
    • proguardFile/proguardFiles
  • BuildConfig和资源:
    • Gradle可以通过 buildConfigField 扩展 BuildConfig生成类,通过 resValue 扩展资源文件。可以在Debug和Release使用不同的值。
      //代码节选 debug{ buildConfigField("boolean","mBollean","true") resValue("string","mString","test1") } release { buildConfigField("boolean","mBollean","false") resValue("string","mString","test2") }

  • 项目范围的设置:
    • 若所有模块都是Android app项目时,可以将一些通用配置加到顶层build.gradle的allprojects代码块中:
      allprojects{ apply plugin: 'com.android.application' android{ compileSdkVersion 28 buildToolsVersion '28.0.3' } }

    • Gradle允许在 Projet 对象上添加额外属性。通过ext代码块实现:
      //顶层build.gradle 最下面添加(注意有个等号) ext { compileSdkVersion = 28 buildToolsVersion ='28.0.3' }

      在模块层构建文件可以使用rootProject来获取属性:
      //代码节选 (注意没有等号) apply plugin: 'com.android.application'android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion···

  • 项目属性:(三种常用定义方法)
    • 1.ext 代码块:
      ext { info = "abc" }

    • 2.gradle.properties 文件:
      info = abc

    • 3.-P命令行参数:
      • 首先创建一个任务:
        //任务的名字叫printProperties。 //project.hasProperty("info")会返回boolean值,代表是否有info属性。 //如果有就打印出info属性的值。 task printProperties { if(project.hasProperty("info")){ println(info) } }

      • 执行命令:(gradle + 任务名+参数)
        //-P为设置参数,后面紧随参数名,通过'='号赋参数值。 $ gradle printProperties -Pinfo="Hello"

        结果:
        Android学习笔记|Chapter2:Android下Gradle的基本自定义构建
        文章图片

  • 默认任务:
    • 在顶层build.gradle中添加:
      defaultTasks("clean","assembleDebug")

    • 使用命令查看:
      //Windows $ gradle task | findstr "Default tasks"

      //Mac or Linux $ gradlew task | grep "Default tasks"

2.4 加快Gradle 编译速度
  • 【Android学习笔记|Chapter2:Android下Gradle的基本自定义构建】Windos系统下增大Gradle的JVM内存分配。在 C:\Users\用户名\.gradle\ 目录下新建gradle.properties文件。文件内容:
    org.gradle.daemon=true org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.configureondemand=true

2.5 参考资料
  • Gradle For Android

    推荐阅读