Android 构建速度优化 – 3

这是我参与更文挑战的第26天,活动详情查看: 更文挑战

模块build.gradle

使用静态依赖项版本

在引用依赖库的时候,尽量避免使用+这种动态版本号,而尽量使用静态编码编码版本号, 如果用动态版本号,每次编译的时候Gradle会去检查是否有更新,比如

# 动态版本号
com.android.tools.build:gradle:3.2.+

# 静态版本号
com.android.tools.build:gradle:3.2.1

复制代码

禁用动态BuildConfig

eg项目中有个变量是每次打包都需要实时计算的

buildConfigField "long", "BUILD_TIMESTAMP", getTimeStamp() + "L"
复制代码

我们就需要通过手段,在开发阶段这个值就写死就好了
比如

project.hasProperty("devBuild")?"000000000":getTimeStamp() + "L"
复制代码

我们可以通过使用命令行加参数的方式来按需执行,当然还有其他很多方式,这里只举一个例子

devBuild这个project属性需要我们在build的时候传进去 我们可以通过命令行输入或者AS中一次性配置好

./gradlew clean app:assembleDevelopmentDebug -PdevBuild --profile
复制代码


image.png

禁用其他动态参数 包括但不限于 versionCode/apk-name等等

设置同上,通过参数控制

禁用耗时但在Debug时不需要的Task

如何查看耗时任务呢

  • 使用开头的那个命令行,最后会在本地生成profile文件,直接浏览器打开即可查看

image.png
通过开头的那个命令 我们查看输出的profile文件中看到这项耗时高达半分钟,经调查,这是听云的插件,我们debug阶段并不需要,因此可以去掉

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

if (!project.hasProperty("devBuild")) {
    apply plugin: 'newlens'
}
复制代码
  • 使用build scan(构建审视)

Gradle 官方推出的一个可视化诊断工具,官网地址:scans.gradle.com

gradlew build --scan
复制代码

编译完会问你是否Push到gradle.com,键入: yes即可。
image.png
打开链接,输入接受邮箱,然后打开收到的链接
image.png
在timeline中我们能直观的看到各个任务花费的时间长短

禁用Lint Test

  • 临时禁用

在 gradle 里有这样的指令 -x lint 可以临时禁掉 lint 任务,-x test 可以禁掉 test 任务,事实上对于一个稍微大一点的项目,lint 也是很耗时的

gradle assembleDebug -x lint  -x lintVitalRelease -x test
复制代码
  • 永久禁用

当然也可以通过 gradle 脚本彻底禁用 lint 和 test 任务,但是不太建议这么做,因为有时候 lint 和 test 也是挺有用的

// 方式一  注意放置的位置 
tasks.whenTaskAdded { task ->
    if (task.name.contains("lint") || task.name.contains("lintVitalRelease")) {
        task.enabled = false
    }
}
apply plugin: 'com.android.application'  // 在模块级别的build.gradle中这行之前


// 方式二
app/build.gradle
android{
    ...
    buildTypes{
        ...
        debug{
            ...
            project.gradle.startParameter.excludedTaskNames.add('lint')  // 屏蔽lint耗时检查
        }
    }
    ...
}
复制代码

禁用aapt检查

aapt 全称为 Android Asset Packaging Tool,即为Android资源打包工具。可以通过其来进行配置打包的细节。
详解 aaptOptions——安卓gradle
AaptOptions

android{
	aaptOptions{
		cruncherEnabled = false
	}
}
复制代码

参考

纳尼?我的Gradle build编译只要1s

提升AS编译速度 [效率与工具]

优化AndroidStudio的构建速度

Gradle更小、更快构建APP的奇淫技巧

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享