一篇文章带你学会——Gradle本地化构建技巧

前言:我们从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

本文章完成,如果你觉得对你有帮忙,请点赞,收藏加关注,后续将更多实用文章,谢谢!!!

おすすめ

転載: blog.csdn.net/weixin_43912367/article/details/106349649