IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android构建速度优化总结分享 -> 正文阅读

[移动开发]Android构建速度优化总结分享

? 随着没我们的项目不断地增大,模块化、组件化,APT技术的盛行,导致module拆分过多,多module情况下很容易出现依赖关系混乱、过度依赖等问题,致使构建速度越来越慢。

? 本文针对自己的实际项目经验总结了一些提升一些Android构建速度的方法:

开启Gradle Daemon

Gradle 守护进程是一个后台进程, 它运行着繁重的构建, 然后在构建等待下一次构建的之间保持自身存在. 这使得数据和代码在下一次构建前已经准备好,并存入内存中。这显著的提高了后续构建的性能. 启用Gradle守护进程是一种节约构建时间的廉价方式。

强烈建议在所有开发机器上启用Gradle的守护进程。但是不推荐在持续集成和构建服务器环境下启用守护进程

Gradle自动管理守护进程.如果构建环境配置为利用后台程序,如果在没有可用守护进程,就会自动启动一个守护进程,或者使用现有的空闲的兼容守护进程.如果一个守护进程在3个小时内没有使用,它将会自我终结.一旦配置开发环境为使用的守护进程,守护进程通常是隐形的,容易被遗忘的.

开启并行编译

task默认是串行执行,开启并行执行提高构建速度org.gradle.parallel=true(在项目根目录gradle.properties文件中声明)

调整java堆大小

gradle默认为构建预留1G的堆空间,但对于一个相对较大的app来说还远远不够,可通过org.gradle.jvmargs=-Xmx4096M(在项目根目录gradle.properties文件中声明)配置动态调整,可根据自身设备配置来进行调整。

开启build缓存

org.gradle.caching=true

开启编译缓存

android.enableBuildCache=true

开启后台进程

org.gradle.daemon=true,此选项默认3.0以后自动开启

减少引用仓库的数量

gradle会从用户配置的repositories中顺序的查找并下载依赖库,build过程dependency resolution阶段会执行此操作,它需要访问网络,因此合理配置repositories可减少依赖库查找时间

合理的apply插件

应用的插件到底是全局的还是局部的。
应该配置到合理的位置,allprojects {} or subprojects {},不必要的插件不要apply。

尽量不要使用动态的版本号

(Minimize dynamic and snapshot versions),例如“2.+”。它会迫使gradle访问远程仓库判断是否有新版本可用。

第三方库尽量引用相同版本

gradle会自动为我们解决各种第三方库的版本依赖问题,如果存在过度的版本不一致的问题也会变相增加gradle的工作量

开启R8

R8是新一代的代码压缩工具,它的职能与Proguard相对应。在R8之前,gradle采用D8+Proguard的形式构建,R8则将混淆和D8工具整合(D8编译器在gradle 3.1版本默认开启),旨在加快构建时间和output apk大小

开启方式:android.enableR8 = false

开启按需配置

配置有一种方式是按需配置,目前还在试验孵化阶段,所以默认是关闭的,可以通过在gradle.properties加入这样一句来开启org.gradle.configureondemand=true

减少编译脚本中的I/O操作

有时候,编译脚本中会有一些代码做动态配置信息的获取,很多时候其实不需要每次搜需要去获取,可以使用缓存或者使用脚本控制与打包机进行区分,日常开发调试是不需要实时获取配置信息

开启kotlin的增量和并行编译

如果项目开发过程中有部分模块使用到了kotlin我们需要对其编译进行优化

kotlin.incremental=true
kotlin.incremental.java=true
kotlin.incremental.js=true
kotlin.caching.enabled=true
kotlin.parallel.tasks.in.project=true *//开启kotlin并行编译*

优化kapt

kapt.use.worker.api=true  //并行运行kapt1.2.60版本以上支持
kapt.incremental.apt=true  //增量编译 kapt1.3.30版本以上支持
//kapt avoiding 如果用kapt依赖的内容没有变化,会完全重用编译内容,省掉最上图中的:app:kaptGenerateStubsDebugKotlin的时间
kapt.include.compile.classpath=false

开启KAPT 编译缓存

在项目的app目录中的build.gradle文件中修改

kapt {
  useBuildCache = true
  javacOptions {
    option("-Xmaxerrs", 500)
  }
}

手动配置maxProcessCount

在项目的app目录中的build.gradle文件中修改

android {
  dexOptions {
    preDexLibraries true
    maxProcessCount 8
  }
}

合理的apply插件

应用的插件到底是全局的还是局部的。
应该配置到合理的位置,allprojects {} or subprojects {},不必要的插件不要apply。

Build Scans工具介绍

我们在进行优化的时候,主要监测工具可以使用Build Scans,Build Scans是用于开发和维护Gradle构建的重要工具。它为你提供了构建的详细信息,并为你识别构建环境、依赖或性能上存在的问题,同时可以帮你更全面地理解并提升构建过程,也便于与他人的合作。

在Gradle构建运行时,Build Scans插件会抓取数据,并将数据传送到Build Scans服务端。同时返回一个可被共享的链接,内部包含有用的构建信息。这些信息包含两大类:*(1)环境信息,包括操作系统、Java版本和时区;(2)构建相关信息,包含使用的插件、任务、测试以及依赖信息。

build scans 主界面:
build Scans界面

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:20:40  更:2021-10-06 12:23:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:01:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码