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

引言

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

一、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 项目主要结构概述

在这里插入图片描述

1、gradle目录

gradle目录则是配置当前项目编译所采用的gradle版本信息,如果配置的版本已经在本地目录下存在完整版本的就会直接使用,反之就会先去网上下载对应的版本,如下图
在这里插入图片描述

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

build.gradle脚本文件可以看成是org.gradle.api.Project的映射,而最外层的节点名称映射到org.gradle.api.Project中对应的方法
项目Project根目录下的build.gradle是用配置所有子Module下的gradle执行的时候所需要的信息。

3、子Module目录下的build.gradle

和Project目录下的build.gradle大同小异,最外层的节点映射到org.gradle.api.Project下对应的方法,android节点除外,虽然没有定义在org.gradle.api.Project里但是可以通过Android插件来支持配置。
在这里插入图片描述
app和lib Module类型中android节点所支持的属性可查阅Android Plugin DSL Reference中的Extension types部分。而且Gradle的配置非常灵活同样的配置可以在不同的节点进行配置来实现统一效果。

4、Extern Libraries

这其实不是一个文件夹,只是列出该Module运行所要依赖的所有lib文件列表,如下图部分库列表。
在这里插入图片描述

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中找到)
在这里插入图片描述

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方法等
在这里插入图片描述
当然还可以在这里做很多事,比如说通过以下代码就可以重新制定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:未完待续…

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CrazyMo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值