这是我参与更文挑战的第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
复制代码
或
禁用其他动态参数 包括但不限于 versionCode/apk-name等等
设置同上,通过参数控制
禁用耗时但在Debug时不需要的Task
如何查看耗时任务呢
- 使用开头的那个命令行,最后会在本地生成profile文件,直接浏览器打开即可查看
通过开头的那个命令 我们查看输出的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即可。
打开链接,输入接受邮箱,然后打开收到的链接
在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
}
}
复制代码