在Gradle术语中,一个项目(project)代表一个正在构建的组件(比如,一个JAR文件),或一个想要完成的目标,如部署应用程序。每个Gradle构建脚本build.gradle至少定义一个项目。当构建进程启动后,Gradle基于build.gradle中的配置实例化org.gradle.api.Project类,并且能够通过project变量使其隐式可用。
1.Project相关API
Project提供了一系列操作Project对象的API。如下:
//返回工程RootProject
Project getRootProject();
//返回父Project,在RootProject中调用会返回null
@Nullable
Project getParent();
//返回当前Project
Project getProject();
//返回一个Project的Set集合,包含当前Project和所有子Project
Set<Project> getAllprojects();
//返回一个Project的Set集合,包含所有子Project
Set<Project> getSubprojects();
//返回指定路径的Project,找不到时返回null
@Nullable
Project findProject(String path);
//返回指定路径的Project,不存在时抛出UnknownProjectException
Project project(String path) throws UnknownProjectException;
//为所有子Project增加配置
void subprojects(Closure var1);
//为当前Project以及所有子Project增加配置
void allprojects(Closure var1);
2.Project属性相关API
Project提供了一系列操作属性的API,通过属性API可以实现在Project之间共享配置参数。如下:
//默认属性
//默认的build文件名
String DEFAULT_BUILD_FILE = "build.gradle";
//路径分隔符
String PATH_SEPARATOR = ":";
//每个工程默认的输出文件夹名称
String DEFAULT_BUILD_DIR_NAME = "build";
//是否存在指定属性名
boolean hasProperty(String propertyName);
//设置属性值,如果属性不存在则抛出MissingPropertyException
void setProperty(String name, @Nullable Object value) throws MissingPropertyException;
//获取属性值,如果不存在则抛出MissingPropertyException
@Nullable
Object property(String propertyName) throws MissingPropertyException;
//查找属性值,如果不存在返回null
@Nullable
Object findProperty(String propertyName);
2.1 ext扩展属性
gradle为Project提供了ext命名空间,用于定义扩展属性。子Project会继承父Project定义的ext属性,但是只读的。我们经常会在Root Project中定义ext属性,而在子Project中可以直接复用属性值。
3.Project文件相关API
3.1 文件获取相关
//获取Project根目录(非项目根目录)
File getRootDir();
//build文件夹目录
File getBuildDir();
//获取项目目录
File getProjectDir();
3.2 文件定位相关
//获取单个文件,相对当前Project目录
File file(Object path);
//获取多个文件,相对当前Project目录
ConfigurableFileCollection files(Object... paths);
3.3 文件拷贝
//文件拷贝,接受闭包作为参数。
WorkResult copy(Closure var1);
使用如下:
copy {
//文件来源
from file(‘a.jks’)
//目的地
into getRootProject().getBuildDir().path + "/apk/"
exclude {
//排除不需要拷贝的文件
}
rename {
//重命名
}
}
3.4 文件遍历
//将指定目录转化为文件树
ConfigurableFileTree fileTree(Object path);
使用如下:
fileTree('build/output/apk'){ FileTree fileTree ->
fileTree.visit{ FileTreeElement fileTreeElement ->
}
}