Android Gradle本地化构建技巧

自定义Gradle配置文件

config.gradle

在根目录新建config.gradle

在这里插入图片描述
config.gradle内容如下:

ext {
    //Android 配置
    android = [
            compileSdkVersion: 29,
            buildToolsVersion: "29.0.1",
            applicationId    : "com.xx.xx",
            minSdkVersion    : 21,
            targetSdkVersion : 29,
            versionCode      : 8,
            versionName      : "1.7"
    ]
    //依赖 配置
    dependencies = [
            "httpclient"     : 'org.apache.http.legacy',
            "appcompat"      : 'androidx.appcompat:appcompat:1.0.2',
            "bmobsdk"        : 'cn.bmob.android:bmob-sdk:3.7.3-rc1',
            "rxjava2"        : "io.reactivex.rxjava2:rxjava:2.2.2",
            "rxandroid2"     : 'io.reactivex.rxjava2:rxandroid:2.1.0',
            "okio"           : 'com.squareup.okio:okio:2.1.0',
            "gson"           : 'com.google.code.gson:gson:2.8.5',
            "okhttp3"        : 'com.squareup.okhttp3:okhttp:3.12.0',
            "tagcloud"       : 'com.moxun:tagcloudlib:1.2.0',
            "circleimageview": 'de.hdodenhof:circleimageview:3.0.0',
            "glide"          : 'com.github.bumptech.glide:glide:4.9.0',
            "recyclerview"   : 'androidx.recyclerview:recyclerview:1.0.0',
            "datepicker"     : 'cn.aigestudio.datepicker:DatePicker:2.2.0',
            "litepal"        : 'org.litepal.android:java:3.0.0',
            "eventbus"       : 'org.greenrobot:eventbus:3.1.1',
            "tablayout"      : 'com.google.android.material:material:1.0.0',
            "photoview"      : 'com.github.chrisbanes:PhotoView:2.3.0',
            "3dmap"          : 'com.amap.api:3dmap:5.0.0',
            "location"       : 'com.amap.api:location:3.3.0',
            "search"         : 'com.amap.api:search:5.0.0',
            "bugly"          : 'com.tencent.bugly:crashreport:2.1.9',
            "buglyndk"       : 'com.tencent.bugly:nativecrashreport:3.0',
            "zxing"          : 'cn.yipianfengye.android:zxing-library:2.2',
            "videoplayer"    : 'cn.jzvd:jiaozivideoplayer:7.0.5'
    ]
    //仓库
    maven = [
            "bmobUrl": "https://raw.github.com/bmob/bmob-android-sdk/master",
            "jitpack": "https://jitpack.io"
    ]
}

引入自定义Gradle

在项目的根build.gradle中引入自定义Gradle配置文件

//引入自定义Gradle配置文件
apply from: "config.gradle"

app module和其他module的 build.gradle都可以使用config.gradle中定义的参数,如果有数据需要修改,只需要修改config.gradle,所有module中的build.gradle都不需要做修改。

好处:

  • 1.统一性
  • 2.便于管理
  • 3.版本管理

app的build.gradle

app的build.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"]
    }
...
}

base的build.gradle

android {
    //HttpClient
    useLibrary rootProject.ext.dependencies["httpclient"]
    compileSdkVersion rootProject.ext.android["compileSdkVersion"]
    buildToolsVersion rootProject.ext.android["buildToolsVersion"]
    defaultConfig {
        minSdkVersion rootProject.ext.android["minSdkVersion"]
        targetSdkVersion rootProject.ext.android["targetSdkVersion"]
        versionCode rootProject.ext.android["versionCode"]
        versionName rootProject.ext.android["versionName"]
    }
	...
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    //V7
    api rootProject.ext.dependencies["appcompat"]
    api rootProject.ext.dependencies["bmobsdk"]
    api rootProject.ext.dependencies["rxjava2"]
    api rootProject.ext.dependencies["rxandroid2"]
    api rootProject.ext.dependencies["okio"]
    api rootProject.ext.dependencies["gson"]
    api rootProject.ext.dependencies["okhttp3"]
    api rootProject.ext.dependencies["tagcloud"]
    api rootProject.ext.dependencies["circleimageview"]
    api rootProject.ext.dependencies["datepicker"]
    api rootProject.ext.dependencies["glide"]
    api rootProject.ext.dependencies["recyclerview"]
    api rootProject.ext.dependencies["litepal"]
    api rootProject.ext.dependencies["eventbus"]
    api rootProject.ext.dependencies["tablayout"]
    api rootProject.ext.dependencies["photoview"]
    api rootProject.ext.dependencies["3dmap"]
    api rootProject.ext.dependencies["location"]
    api rootProject.ext.dependencies["search"]
    api rootProject.ext.dependencies["bugly"]
    api rootProject.ext.dependencies["buglyndk"]
    api rootProject.ext.dependencies["zxing"]
    api rootProject.ext.dependencies["videoplayer"]
}

配置Gradle常量

打开BuildConfig文件,查看Gradle常量
在这里插入图片描述
在buildTypes下添加如下代码:
在这里插入图片描述

      debug {
            //自定义Gradle常量
            buildConfigField("boolean","LOG_DEBUG","true")
            buildConfigField("String","LOG_TAG","\"YueJian\"")
            buildConfigField("String","SP_NAME","\"Config\"")
        }

同步后查看BuildConfig文件
在这里插入图片描述
已经为我们构建出了需要的常量

使用这些常量如下,这样就可以在debug版本中做一些操作,如输出日志,而在release版本中不会执行这些操作。
在这里插入图片描述

提升Gradle构建速度的十大技巧

  • 使用最新版的Gradle插件
  • 避免激活旧的Multidex
  • 禁止Multidex Apk构建
  • 最小化打包资源文件
  • 禁用png压缩
  • png转换webp
  • 推荐使用instant run
  • 不使用动态版本标识
  • Gradle内存分配调优
  • 开启Gradle构建缓存

禁止Multidex Apk构建

Gradle构建的三个性能指标:

  • 全量编译:全部编译 - Open Project
  • 代码增量编译:修改了Java/Kotlin下面的代码的时候编译
  • 资源增量编译:修改了res下面的资源文件的时候编译

发布App到应用市场时需要多渠道打包和全部打包;而调试时候不需要这么多,我们可以禁止一些文件编译。

在调试的时候如何禁止呢?

Settings-Build-Compiler-PdevBuild

在这里插入图片描述

app的build.gradle:
在这里插入图片描述

android {
    //调试的时候禁止,加快编译速度
    if(rootProject.hasProperty('devBuild')){
        splits.abi.enable = false
        splits.density.enable = false
        //禁用PNG压缩
        //aaptOptions.cruncherEnabled = false
    }
...

最小化打包资源文件

android {
    //默认配置
    defaultConfig {
        //调试
        resConfigs("zh","xxhdpi")
	...
	}
	...
}

禁用png压缩

在这里插入图片描述

android {
    //调试的时候禁止,加快编译速度
    if(rootProject.hasProperty('devBuild')){
        splits.abi.enable = false
        splits.density.enable = false
        //禁用PNG压缩
        aaptOptions.cruncherEnabled = false
    }
...

png转换webp

在这里插入图片描述

不使用动态版本标识

不要在添加依赖的时候使用 + 加号

Gradle内存分配调优

在这里插入图片描述

开启Gradle构建缓存

#开启Gradle构建缓存
org.gradle.caching=true

在这里插入图片描述

发布了446 篇原创文章 · 获赞 67 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/hongxue8888/article/details/104692385
今日推荐