来自度娘的解释是:Gradle 是一个基于 JVM 的构建工具,是一款通用灵活的构建工具,支持 maven, Ivy 仓库,支持传递性依赖管理,而不需要远程仓库或者是 pom.xml 和 ivy.xml 配置文件,基于 Groovy,build 脚本使用 Groovy 编写。
这样说还是比较抽象。
或许下面的这个例子可以帮助你更好的理解它。
“比如,大部分的 Java 项目基本流程都是相似的:编译源文件、进行单元测试、创建 Jar 包,使用 Gradle 做这些工作可以不用为每一个工程都编写代码。使用 Gradle 和它的插件可以为你减少重复性的代码与工作。”
如果这个还有一点抽象的话,或许下面这个也是一个不错的例子。
我们拿手机抓 trace 后自动转化来说。trace 分析手机卡顿的一个方法。抓取后 trace 需要转化为 html 格式,其中的一个方法是:
但是如果我们有很多的 trace 要转化,每次都开一个 cmd 窗口来敲命令转化就很麻烦了,所以我们可以写一个脚本让它实现自动转化:
File fileParent = new File(fileDir);
if(fileParent.isDirectory()){
File fileList[] = fileParent.listFiles();
String systracePyFilePath = getSystracepyPath("D:\\systrace\\systrace");
for(int i = 0;i < fileList.length;i++){
try {
// String saveSystracePyFilePath = saveSystracepyPath("C:\\Users\\chenxiuxian\\Desktop\\result",fileList[i].getName());
String saveSystracepyName = fileList[i].getName();
Process pr = Runtime.getRuntime().exec("python "+ systracePyFilePath + " --from-file " + fileList[i]);
BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));
try{
Thread.sleep(5000);
}catch(InterruptedException e){
e.printStackTrace();
}
while(br.readLine() != null){
String s = br.readLine();
System.out.println(s);
}
if(br.readLine() == null){
String systemDir = System.getProperty("user.dir");
System.out.println("Systrace file save path:" + System.getProperty("user.dir"));
try{
Thread.sleep(5000);
}catch(InterruptedException e){
e.printStackTrace();
}
br.close();
pr.destroy();
File file = new File(systemDir + File.separator + "trace.html");
file.renameTo(new File(file.getParent() + File.separator + saveSystracepyName + ".html"));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
看到这里大概你明白了,Gradle 是一个自动化构建的脚本,帮助我们自动化完成一个工程/应用/项目需要的资源、编译、打包等工作。
所以,在 Android Studio 中你可以看到,Gradle 配置了很多属性,主要是工程编译需要的属性:
build.gradle:分为项目级和模块级别,用于描述 APP 工程的编译规则。
proguard-rules.pro:该文件用于描述 java 文件的代码混淆规则。我的代码没有做混淆,所以你可以看到的没有改动过的文件是这样子的:
gradle.properties:该文件用于配置编译工程的命令行参数,一般无须改动。
settings.gradle,配置哪些模块在一起编译。初始内容为 include':app',表示只编译 App 模块。
local.properties,项目的本地配置,一般无须改动。该文件是在工程编译时自动生成的,用于描述开发者本机的环境配置,比如 SDK 的本地路径、NDK 的本地路径等。
对于 Gradle 了解到这里似乎也没有什么让人值得注意的。但是对于我们测试同学来说,可以用来学习编程实践的时间是宝贵的,我们更要分清主次。所以下面的话是重要的:
项目级别的 build.gradle 一般无须改动,我们只需关注模块级别的 build.gradle。
所以弄清楚 build.gradle 里面每个参数的用途,可以在你搭建 Android 项目、编译 APP、导入其他 Android 项目时遇到的环境报错处理起来更有方向感:
所以当你遇到以下问题,你就知道的工程问题出现在依赖库,只要修改依赖库的版本号即可:
如果说测试开发是一条升级打怪之路,那么搭建起一个可以运行的开发环境就是打怪升级的第一步。