Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法完全解析(一)

文章大纲

  • 引言
  • 一、Gradle 概述
  • 二、Android Sutdio 3.0.1 项目主要结构概述
    • 1、gradle目录
    • 2、项目Project根目录下的build.gradle
    • 3、子Module目录下的build.gradle
    • 4、Extern Libraries
    • 5、build目录
    • 6、.externalNativeBuild目录
    • 7、gradle.properties
    • 8、gradlew和gradlew.bat
    • 9、gradle-wrapper.properties
    • 10、settings.gradle
    • 11、local.properties

引言

对于我们Android程序员来说,Gradle或许对我们来说既熟悉又有点陌生,熟悉的是自Android Studio面试依赖Gradle 就被当做默认的项目自动化构建工具集成到开发环境中,按照各种所谓的速成教程很快就可以通过Gradle构建出自己的APK,而陌生指的是有相当一部分的人完全不知道Gradle 的构建脚本的Build文件的语法以及背后的工作逻辑,甚至很多人一度搞不清楚Gradle真正的面目,认为Gradle只能用在Android中,导致在编译调试项目的过程中遇到的问题时无从下手,Gradle系列文章链接如下:

  • Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法完全解析(一)
  • Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法android子节点buildTypes、productFlavors、variantFilt完全解析(二)
  • Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法android剩余子节点配置完全解析(三)
  • Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法dependencies节点和依赖管理完全解析(四)

一、Gradle 概述

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置,使用Groovy语法构建Build脚本。是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven远程仓库、nexus私服、ivy仓库以及本地文件系统的jars或者flatDirs,支持传递性依赖管理,而不需要远程仓库或是pom.xml和ivy.xml配置文件,主要面向Java应用为主,当前其支持的语言限于Java、Groovy、Kotlin和Scala,计划未来将支持更多的语言。

二、Android Sutdio 3.0.1 项目主要结构概述

Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法完全解析(一)_第1张图片

1、gradle目录

gradle目录则是配置当前项目编译所采用的gradle版本信息,如果配置的版本已经在本地目录下存在完整版本的就会直接使用,反之就会先去网上下载对应的版本,如下图
Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法完全解析(一)_第2张图片

2、项目Project根目录下的build.gradle

build.gradle脚本文件可以看成是org.gradle.api.Project的映射,而最外层的节点名称映射到org.gradle.api.Project中对应的方法
Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法完全解析(一)_第3张图片

3、子Module目录下的build.gradle

和Project目录下的build.gradle大同小异,最外层的节点映射到org.gradle.api.Project下对应的方法,android节点除外,虽然没有定义在org.gradle.api.Project里但是可以通过Android插件来支持配置。
Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法完全解析(一)_第4张图片
app和lib Module类型中android节点所支持的属性可查阅Android Plugin DSL Reference中的Extension types部分。而且Gradle的配置非常灵活同样的配置可以在不同的节点进行配置来实现统一效果。

4、Extern Libraries

这其实不是一个文件夹,只是列出该Module运行所要依赖的所有lib文件列表,如下图部分库列表。
Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法完全解析(一)_第5张图片

5、build目录

执行make之后默认的输出目录,这包含make进程的所有完整输出,比如说 .class.dex.apk.jar.aarso.a资源等所有中间输出产物,所以通过这个目录可以检查是否成功引入了jar或者aar等,这也相当于Eclipse中默认Java工程的bin目录。不过在Android Studio下隐藏了很多类型的输出,只保留一些重要的输出(比如你的R.java可以在build / source / < flavor > / r / < build type(optional)> / < package > /R.java中找到)
Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法完全解析(一)_第6张图片

6、.externalNativeBuild目录

NDK开发的话则会多出一个 .externalNativeBuild目录,这是保存本地源代码编译过程的产物

7、gradle.properties

gradle.properties可用于指定gradle的一些全局的配置信息参数,可以配置虚拟机VM可运行的内存大等一些优化编译速度的选项,也可以在这里定义全局的gradle变量。

8、gradlew和gradlew.bat

本质上两个的功能都一样,gradlew和gradlew.bat脚本功能是一样的,只是运行在不同平台上的脚本文件而已,都是为了确保构建环境的一致性,而做的包装处理,其中gradlew是运行的Linux环境下的脚本而gradlew.bat则是Windows 环境下的批处理脚本,配置了环境变量之后可以直接通过命令行执行相关的gradle 指令:

//windows 环境
gradlew task

//类Unix
./gradlew task

9、gradle-wrapper.properties

用于配置项目编译时使用Gradle的版本和对应的路径。

10、settings.gradle

settings.gradle主要是用于配置多Module时的构建信息(直接影响着多Module的依赖关系也是图形界面更改依赖库的操作的本质)用于多项目Module 配置,也可以指定Gradle 编译的文件名(build.gradle只是默认的名称而已),实际上include 也是对应着include方法。,需要把哪个Module打包到Projec就include 到Project下,settings.gradle其实是映射为org.gradle.api.initialization.Settings类,所以可以通过Groovy 语言调用了Settings.java中的include方法当然也可以调用Settings.java中的其他方法比如说getRootDir方法等
Android 进阶——Android Studio 项目结构详细述及Gradle脚本语法完全解析(一)_第7张图片
当然还可以在这里做很多事,比如说通过以下代码就可以重新制定app module编译时用的脚本

//意味着这个Project 包含两个Module,且两个都位于同一级目录下
include ':app', ':libcmo'

//意味着这个Project 包含两个Module,且app目录与cmo目录同级,而libcmo在cmo下
include ':app', 'cmo:libcmo'

//设置构建文件的名称
project(':app').buildFileName("crazy.gradle")

11、local.properties

这个文件主要是保存一些与Android开发环境相关的配置,构建时Android 插件会去读取Project 根目录下的local.properties中的信息,配置SDK和或NDK的相关信息。

ps:未完待续…

你可能感兴趣的:(Android,进阶)