Gradle 除了Project、Task这两个核心模块外还有一些重要的模块。
知识图
一、Settings类
二、资源、源码管理-SourceSet
这个类对应sourceSets闭包,主要是用来管理安卓资源、java源码、第三方库、jar文件 so文件等位置。
1、栗子-修改so的默认读取位置
安卓studio上默认读取位置为 main-jinLibs 文件夹
sourceSets{
// .so 默认 main/jniLibs 文件件下
main{
jniLibs.srcDir = "libs" // .so 文件位置修改
// jniLibs.srcDirs= ["libs","xxx"]//这些文件夹中读取 so
}
}
1、这样就默认从app的libs文件夹下加载so了
2、系统里修改其他的默认位置只需通过sourceSets闭包默认闭包文件夹(如上mian)找到,然后修改即可。
3、还可以修改多个文件夹
4、如上就是拿到main文件,就可以修改main文件夹下所有的默认位置。
2、需求res资源分包管理
需求:向java文件一样对资源文件分包管理。栗子:广告资源去res-ad文件夹下加载,播放器资源去res-player文件夹下加载。
(1)建立文件夹
其实我们还会发现我们建立的是普通的文件夹,没有res文件夹上面的小图标。
(2)修改SourceSet,同步工程
sourceSets {
main {
res.srcDirs = ["src/main/res", "src/main/res-ad", "src/main/res-player"]
}
}
可以以看到我们新建立的文件夹也可以放资源了和res的功能一样了
3、小结
1、sourceSets可以多次调用,在android闭包下调用即可。或者其他地方android.sourceSets调用
2、上面的两个例子实际开发中常用
三、自定义Plugin
四、andriod 对gradle的扩展
安卓工程中一句简单的gradle代码就可以使用安卓插件啦!如下,创建安卓工程后系统默认生成。
如上一句简单的代码引入后,我们就可以在app/build.gradle下使用安卓插件提供的属性或者Task了。
1、安卓中所有可配置属性
安卓插件引入后,安卓工程下app/build.gradle中android{}可以有哪些配置?可以调用哪些方法呢?其实查看BaseExtension类即可,这个类中定义了安卓闭包可以配置哪些东西,。类如下所示:
ps:配置的子配置查看相应的类即可。
2、安卓插件引入的Task
1、BaseVariant 类中定义了安卓插件可以使用的Task 和属性。
2、安卓中的变体有常见的几种形式1、application类型:application 类型变体
2、library类型:安卓库工程类型变体
3、test类型:很少用ps:详情参考:github上的翻译文档
3、栗子:通过变体操作安卓插件配置的属性
// 遍历所有变体(通过all闭包)
this.android.applicationVariants.all {
variant ->
def baseName = variant.baseName
def name = variant.name
println "baseName:$baseName"
println "Name:$name"
}
log:
> Configure project :app
baseName:debug
Name:debug
baseName:release
Name:release
1、获得安卓中的变体集合:android.applicationVariants
2、默认情况下安卓有一个默认渠道,这个渠道有两个变体:1、debug
2、release3、用户可以配置多渠道,每种渠道都会有debug、release变体
4、栗子:通过变体操作安卓插件中的Task
this.afterEvaluate {
// 遍历所有变体
this.android.applicationVariants.all {
variant ->
Task task = variant.checkManifest
println(task.name)
}
}
简单的获得application 中的任务
五、ant、maven迁移到gradle
1、两种方式
- 迁移:编译器安装gradle插件,导出为gradle工程即可。
核心:不同的工程结构为啥修改后能运行?:gradle修改了build.gradle的sourceSet文件。
收获:不同的构建工程,读取的资源目录可能不同,使用gradle的sourceSet读取下指定目录即可。
- 改造:修改sourceSet默认读取目录即可。(例如安卓studio读取 libs下的so,修改sourceSet默认读取位置即可(默认读取位置main/jniLibs))