前言:我们从Eclipse转为Android Studio以后呢,我们Android Studio一直用的编译工具,就是Gradle。它有两个配置文件,我们可以针对这两个配置文件进行优化,这样可以节省我们的空间和时间,这样我们的开发会比较有效率!!!希望这篇文章对阅读者有所帮助,期待大家的评论和关注,谢谢!!!
一.为什么要自定义Gradle配置文件
关于这一点呢,我们要从实际工程中,实际的看一下。
首先,我们的工程呢,它是有两个gradle文件,一个是项目总工程的build.gradle,这里面主要是仓库,放一些信息。
其次,在我们app下,也有一个gradle文件,这个文件主要配置我们项目相关的东西,这里面可以写很多我们的任务级,也有我们很多的引入。
现在呢,我们来做一个假设:一个项目呢,有一个主Model,它对于的就是我们app下的gradle文件,除了主Model之外呢,还有N个副Model,在每一个副Model里面呢,都有一个gradle文件,每一个gradle的属性可能不一样,当不一样时,程序就会报错,不能相互调用。为了解决这个问题,我们要对它进行统一的配置,这就这篇文章接下来所讲解的内容。
自定义Gradle配置文件可以实现Model信息的统一性,便于管理等特点,能够极大的提高开发效率!!!
二.如何自定义Gradle配置文件
当说了好处之后,就是具体应用了,那么自定义Gradle,具体怎么操作呢?
1.其实非常简单,先把项目列表,切换到Project模式
2.在项目目录下,创建一个名为config.gradle的文件
3.根据主Model的gradele文件里面的内容进行编写config.gradle,代码如下:
ext{
//Android配置
android = [
compileSdkVersion:29,
buildToolsVersion:"29.0.3",
applicationId:"com.zrc.meet",
minSdkVersion:15,
targetSdkVersion:29,
versionCode:1,
versionName:"1.0"
]
//依赖配置
dependencies = [
"appcompat":'androidx.appcompat:appcompat:1.1.0'
]
}
这段代码中,先写一个范围ext{},接下来的内容,将在ext中进行编写。
首先呢,先对Android一些属性进行配置,android = [],在这里面,根据主Model的gradele文件里面的内容,进行填写
其次对一些依赖,进行统一管理,这里,看个人需求,作为演示,我只依赖了androidx.appcompat:appcompat:1.1.0
!!
这样,自定义Gradle配置文件就完成了,是不是非常简单!!!
三.如何应用自定义的配置文件
相信到这,大家都有一个疑问,自定义完成之后,怎么使用呢?
我们不可能只定义在这里,不去使用,这样的话,将毫无意义。
下面进行讲解:
1.打开项目总工程的build.gradle,在开头引入我们自定义的gradle文件
//引入自定义Gradle配置文件
apply from: "config.gradle"
2.打开主Model的gradle文件,进行相应的关联配置。
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion rootProject.ext.android["buildToolsVersion"]
defaultConfig {
applicationId rootProject.ext.android["applicationId"]
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
...
...
dependencies {
...
implementation rootProject.ext.dependencies["appcompat"]
}
和以前代码相比,gradle里面的参数发生了变化,直接引用变成了间接引用刚刚创建的gradle文件的数据。
我们随便拿出一句说事:rootProject.ext.android["applicationId"]
在这段代码中,rootProject代表总目录,ext是我们刚刚定义的范围,android也是我们刚刚写的,储存一些信息,applicationId代表从android里面提取出一个具体的元素。具体的取出来的就是下图。
好了,这样我们就完成了应用自定义的配置文件!!!
现在呢,估计还会有人想说,这有什么用?只是把直接引用变成了间接引用而已啊!!!、
没错,就是把直接变成了间接,但是用处却是特别大的!!!想想看,当所有的Model的属性不一致的时候,统一间接交予直接创建的gradle进行管理,更加方便,可以达到修改一处,多处修改的效果,相当方便!!
四.如何配置Gradle常量
是不是觉得到这就结束了?不不,好戏才刚刚开始!!
回到我们的app下的gradle文件中,我们如果想自定义一些自己的Gradle常量,具体怎么做呢?
那我们需要先了解几个概念:
什么是BuildConfig?
它是android studio在打包时自动生成的一个java类。
BuildConfig在哪里?
BuildConfig类在项目工程的build/generated/source/buildConfig/androidTest或debug或release中,这些目录中的BuildConfig类中有相同的常量字段。
那文件里面,存储着一些系统自定生成的常量,那我们如果在里面自定义自己的常量,具体应该怎么做呢?
我们来看buildTypes下,除了release,还有一个debug,使用buildConfigField定义常量
buildTypes {
debug{
//自定义Gradle常量
buildConfigField("boolean","LOG_DEBUG","true")
buildConfigField("String","LOG_TAG","\"Meet\"")
buildConfigField("String","SP_NAME","\"Config\"")
}
release {
buildConfigField("boolean","LOG_DEBUG","false")
buildConfigField("String","LOG_TAG","\"Meet\"")
buildConfigField("String","SP_NAME","\"Config\"")
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
写完之后,我们Sync Now一下,再打开我们的BuildConfig文件,就能够看到我们自定义的信息了
/**
* Automatically generated file. DO NOT MODIFY
*/
package com.zrc.meet;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.zrc.meet";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
// Fields from build type: debug
public static final boolean LOG_DEBUG = true;
public static final String LOG_TAG = "Meet";
public static final String SP_NAME = "Config";
}
如果没有生有BuildConfig文件,那多半是因为Gradle编译失败,没有生成该文件。解决方法很简单,Build–Make Moudule XXX,重新编译并且解决存在的问题即可。
这样,配置Gradle常量就完成了!!!
五.提升Gradle构建速度的十大技巧
到这,大家以为结束了?NO,NO,NO,最后主菜给大家点技巧吧!!
大家都知道,使用Android Studio去构建一个项目的话,在项目变得十分庞大的时候,它的构建速度,也会变的越来越慢,这是一个历史遗留的问题,深受大家的诟病,所以呢,在这里,写出提升Gradle构建速度的十大技巧,希望通过这十大技巧,让大家在调试的时候,能少一些麻烦。让大家的开发效率提高!!
1.使用最新版的Gradle插件
这里我们一定要使用最新的插件,因为它每一次更新,都会修复大量的BUG,并且提升一些性能!!!
那如何查看Gradle版本呢?在下图文件中的
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
里面写着gradle版本信息,我的版本是5.6.4
2.避免激活旧的Multidex
我们都知道,一个应用的方法数,是不能超过64k的,如果超过的话,就启动分包的编译了。但是如果在Android 5.0之前,编译速度非常慢,为什么呢》那是因为技术上没有达标,它只是帮你解决了这个问题,但是没有优化这个问题。但是在现在的版本上,都自带了分包的功能了,不用担心,但是我们应该知道,老的版本是存在这个问题的!!!
3.禁止Multidex Apk构建
这里面,我们要普及一些概念:
Gradle构建的三个性能指标:
- 1.全量编译:全部编译 - Open Project
- 2.代码增量编译:修改了java/kotlin下面的代码时,编译
- 3.资源增量编译:修改了res下面的资源文件时,编译
现在,我们回到这个建议,我们发布App到应用市场,需要进行 多渠道打包/全部打包,但是调试:不需要这么多 只需要一个debug,这样怎么办呢?
点击Setting - Build - Compiler 在框里面输入-PdevBuild
再回到我们主项目下的,加入以下代码:
//调试
if(rootProject.hasProperty('devBuild')){
splits.abi.enable = false
splits.density.enable = false
}
4.最小化打包资源
在编译的时候,只编译指定的东西。在defaultConfig下,写:
//调试
resConfig("xxhdpi")
上面代码,意思是只编译xxhdpi这一个指定的东西
5.禁用PNG压缩
aaptOptions.cruncherEnabled = false
6.PNG转换为WebP
找到一张png图片,右键
点进去之后,进行压缩转换就好了
7.推荐使用Instant Run
8.不使用动态版本标识
9.Gradle内存分配调优
这个呢,我们要来到gradle配置文件
这里面有一个属性
这个就是我们虚拟机的内存,我们可以通过调整这个数值来AS数值优化
10.开启Gradle构建缓存
还是在gradle配置文件++,开启Gradle构建缓存,在里面添加代码
# 开启Gradle构建缓存
org.gradle.caching = true
本文章完成,如果你觉得对你有帮忙,请点赞,收藏加关注,后续将更多实用文章,谢谢!!!