Android Gradle本地化构建技巧

文章目录
自定义Gradle配置文件
config.gradle
引入自定义Gradle
app的build.gradle
base的build.gradle
配置Gradle常量
提升Gradle构建速度的十大技巧
禁止Multidex Apk构建
最小化打包资源文件
禁用png压缩
png转换webp
不使用动态版本标识
Gradle内存分配调优
开启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"
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
引入自定义Gradle
在项目的根build.gradle中引入自定义Gradle配置文件

//引入自定义Gradle配置文件
apply from: "config.gradle"
1
2
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"]
    }
...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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"]
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
配置Gradle常量
打开BuildConfig文件,查看Gradle常量

在buildTypes下添加如下代码:


      debug {
            //自定义Gradle常量
            buildConfigField("boolean","LOG_DEBUG","true")
            buildConfigField("String","LOG_TAG","\"YueJian\"")
            buildConfigField("String","SP_NAME","\"Config\"")
        }
1
2
3
4
5
6
同步后查看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
    }
...
1
2
3
4
5
6
7
8
9
最小化打包资源文件
android {
    //默认配置
    defaultConfig {
        //调试
        resConfigs("zh","xxhdpi")
    ...
    }
    ...
}
1
2
3
4
5
6
7
8
9
禁用png压缩


android {
    //调试的时候禁止,加快编译速度
    if(rootProject.hasProperty('devBuild')){
        splits.abi.enable = false
        splits.density.enable = false
        //禁用PNG压缩
        aaptOptions.cruncherEnabled = false
    }
...
1
2
3
4
5
6
7
8
9
png转换webp


不使用动态版本标识
不要在添加依赖的时候使用 + 加号

Gradle内存分配调优


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

————————————————
版权声明:本文为优快云博主「傅晨明」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/hongxue8888/article/details/104692385

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值