优化使用kotlin开发Android app的编译速度

前言

在这里插入图片描述

在被指定为Android的官方语言后,Kotlin逐渐取代了Java,成为现今Android开发人员的首选,它让Android开发更加轻松和快捷。

Java和Kotlin语言的相似之处颇多,因此Java开发人员转用Kotlin比较容易。但也正因如此,开发人员很容易忽略Kotlin的独特性及其惯用方法,这可能导致编写的Kotlin代码与Java的代码类似。

之前项目使用Kotlin都是不太满意kotlin的编译速度,想着早点优化早点享受的原则(主要后面项目还得自己搞)对Kotlin的编译速度进行优化

优化步骤:

1.优化gradle配置:

在项目根目录创建一个gradle.properties文件

//开启gradle并行编译,开启daemon,调整jvm内存大小
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

//开启gradle缓存
org.gradle.caching=true
android.enableBuildCache=true

//开启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.include.compile.classpath=false  //kapt avoiding 如果用kapt依赖的内容没有变化,会完全重用编译内容,省掉最上图中的:app:kaptGenerateStubsDebugKotlin的时间

在上面的配置中,我们首先调整了gradle的配置,然后开启了缓存和kotlin和kapt的增量编译。

如果项目中使用了kapt请使用最新版本的kapt,当前写该文章时kapt的最新版本为1.3.31

2.优化app的build.gradle

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

//如果有用到kapt添加如下配置
kapt {
    useBuildCache = true
    javacOptions {
        option("-Xmaxerrs", 500)
    }
}

//在Android代码块中添加如下配置:(可优化最上图中transformClassDexBuilderForDebug的时间)
android {
    dexOptions {
        preDexLibraries true
        maxProcessCount 8
    }
}


2.其他不太重要的优化,好像对时间影响不算特别大

优化版本号的配置,如果是debug版本不要使用动态版本号

//原配置
defaultConfig {
    ...
    minSdkVersion 19
    targetSdkVersion 28
    versionCode gitVersionCode()
    versionName currentName()
    ...
}
//修改为
defaultConfig {
    ...
    minSdkVersion 19
    targetSdkVersion 28
    versionCode 1
    versionName "1.0.0"
    ...
}
applicationVariants.all { variant ->
    ...
    if (variant.buildType.name == "release") {
        versionName = currentName()
        versionCode = gitVersionCode()
    }
    ...
}

以前我们的配置上versionCode是使用的git的提交次数作为版本号的,在本地debug状态的时候其实最好是写死版本号,如果版本号变化会导致需要重新生成Manifest文件以及完整的编译应用,导致InstantRun无法使用(PS其实我们一直没用InstantRun)。所以修改为写死版本号,然后在applicationVariants中判断如果是release才使用正常的版本号。然后还有一个就是使用依赖版本的时候,尽量不要使用+号的版本依赖,使用固定版本号速度会更快。

最后

其实一些东西的优化项目经验多了就会了(被逼的),自己找找资料,积累积累就好了。这里我还有一些整理的资料就发给大家,有需要的扫码领取!

Kotlin入门教程指南,全家桶学习资料(含高级Kotlin强化和Kotlin协程入门进阶实战)

Kotlin 是一种新型的静态类型编程语言,有超过 60% 的专业 Android 开发者在使用,它有助于提高工作效率、开发者满意度和代码安全性。不仅可以减少常见代码错误,还可以轻松集成到现有应用中。

在这里为了方便大家系统的学习Kotlin,这里特意联合了阿里P7架构师和谷歌技术团队共同整理了一份Kotlin全家桶学习资料。

内容概要:Kotlin 入门教程指南、高级Kotlin强化实战和史上最详Android版kotlin协程入门进阶实战 。

内容特点:条理清晰,含图像化表示更加易懂。

由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要 Android中高级面试必知必会 完整文档的可扫描下方卡片免费获取!

Kotlin入门教程指南

第一章 Kotlin 入门教程指南

​ ● 前言

img

第二章 概述

​ ● 使用 Kotlin 进行服务器端开发

​ ● 使用 Kotlin 进行 Android 开发

​ ● Kotlin JavaScript 概述

​ ● Kotlin/Native 用于原生开发

​ ● 用于异步编程等场景的协程

​ ● Kotlin 1.1 的新特性

​ ● Kotlin 1.2 的新特性

​ ● Kotlin 1.3 的新特性

img

第三章 开始

​ ● 基本语法

​ ● 习惯用法

​ ● 编码规范

img

第四章 基础

​ ● 基本类型

​ ● 包

​ ● 控制流:if、when、for、while

​ ● 返回和跳转

img

第五章 类与对象

​ ● 类与继承

​ ● 属性与字段

​ ● 接口

​ ● 可见性修饰符

​ ● 扩展

​ ● 数据类

​ ● 密封类

​ ● 泛型

​ ● 嵌套类与内部类

​ ● 枚举类

​ ● 对象表达式与对象声明

​ ● Inline classes

​ ● 委托

委托属性

img

第六章 函数与 Lambda 表达式

​ ● 函数

​ ● 高阶函数与 lambda 表达式

​ ● 内联函数

img

第七章 其他

​ ● 解构声明

​ ● 集合:List、Set、Map

​ ● 区间

​ ● 类型的检查与转换“is”与“as”

​ ● This 表达式

​ ● 相等性

​ ● 操作符重载

​ ● 空安全

​ ● 异常

​ ● 注解

​ ● 反射

​ ● 类型安全的构建器

​ ● 类型别名

​ ● 多平台程序设计

​ ● 关键字与操作符

img

第八章 Java 互操作与 JavaScript

​ ● 在 Kotlin 中调用 Java 代码

​ ● Java 中调用 Kotlin

​ ● JavaScript 动态类型

​ ● Kotlin 中调用 JavaScript

​ ● JavaScript 中调用 Kotlin

​ ● JavaScript 模块

​ ● JavaScript 反射

​ ● JavaScript DCE

img

第九章 协程

​ ● 协程基础

​ ● 取消与超时

​ ● 通道 (实验性的)

​ ● 组合挂起函数

​ ● 协程上下文与调度器

​ ● 异常处理

​ ● select 表达式(实验性的)

​ ● 共享的可变状态与并发

img

第十章 工具

​ ● 编写 Kotlin 代码文档

​ ● Kotlin 注解处理

​ ● 使用 Gradle

​ ● 使用 Maven

​ ● 使用 Ant

​ ● Kotlin 与 OSGi

​ ● 编译器插件

​ ● 不同组件的稳定性

img

第十一章 常见问题总结

​ ● FAQ

​ ● 与 Java 语言比较

​ ● 与 Scala 比较【官方已删除】

img

高级Kotlin强化实战

第一章 Kotlin 入门教程

​ ● Kotlin 概述

​ ● Kotlin 与 Java 比较

​ ● 巧用 Android Studio

​ ● 认识 Kotlin 基本类型

​ ● 走进 Kotlin 的数组

​ ● 走进 Kotlin 的集合

​ ● 完整代码

​ ● 基础语法

img

第二章 Kotlin 实战避坑指南

​ ● 方法入参是常量,不可修改

​ ● 不要 Companion、INSTANCE?

​ ● Java 重载,在 Kotlin 中怎么巧妙过渡一下?

​ ● Kotlin 中的判空姿势

​ ● Kotlin 复写 Java 父类中的方法

​ ● Kotlin “狠”起来,连TODO都不放过!

​ ● is、as` 中的坑

​ ● Kotlin 中的 Property 的理解

​ ● also 关键字

​ ● takeIf 关键字

​ ● 单例模式的写法

img

第三章 项目实战《Kotlin Jetpack 实战》

​ ● 从一个膜拜大神的 Demo 开始

​ ● Kotlin 写 Gradle 脚本是一种什么体验?

​ ● Kotlin 编程的三重境界

​ ● Kotlin 高阶函数

​ ● Kotlin 泛型

​ ● Kotlin 扩展

​ ● Kotlin 委托

​ ● 协程“不为人知”的调试技巧

​ ● 图解协程:suspend

img

史上最详Android版kotlin协程入门进阶实战

第一章 Kotlin协程的基础介绍

​ ● 协程是什么

​ ● 什么是Job 、Deferred 、协程作用域

​ ● Kotlin协程的基础用法

img

第二章 kotlin协程的关键知识点初步讲解

​ ● 协程调度器

​ ● 协程上下文

​ ● 协程启动模式

​ ● 协程作用域

​ ● 挂起函数

img

第三章 kotlin协程的异常处理

​ ● 协程异常的产生流程

​ ● 协程的异常处理

img

第四章 kotlin协程在Android中的基础应用

​ ● Android使用kotlin协程

​ ● 在Activity与Framgent中使用协程

​ ● ViewModel中使用协程

​ ● 其他环境下使用协程

img

第五章 kotlin协程的网络请求封装

​ ● 协程的常用环境

​ ● 协程在网络请求下的封装及使用

​ ● 高阶函数方式

​ ● 多状态函数返回值方式

img

第六章 深入kotlin协程原理(一)

​ ● suspend的花花肠子

​ ● 藏在身后的-Continuation

​ ● 村里的希望-SuspendLambda

img

第七章 深入kotlin协程原理(二)

​ ● 协程的那些小秘密

​ ● 协程的创建过程

​ ● 协程的挂起与恢复

​ ● 协程的执行与状态机

img

第八章 Kotlin Jetpack 实战

​ ● 从一个膜拜大神的 Demo 开始

​ ● Kotlin 写 Gradle 脚本是一种什么体验?

​ ● Kotlin 编程的三重境界

​ ● Kotlin 高阶函数

​ ● Kotlin 泛型

​ ● Kotlin 扩展

​ ● Kotlin 委托

​ ● 协程“不为人知”的调试技巧

​ ● 图解协程原理

img

第九章 Kotlin + 协程 + Retrofit + MVVM优雅的实现网络请求

​ ● 项目配置

​ ● 实现思路

​ ● 协程实现

​ ● 协程 + ViewModel + LiveData实现

​ ● 后续优化

​ ● 异常处理

​ ● 更新Retrofit 2.6.0

img

由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要 Android中高级面试必知必会 完整文档的可以加微信可免费领取!(承诺:100%免费)

更有更多资料,加微信免费领取

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值