从1.2.3-rc1
版本开始,我们对TheRouter
编译过程做了大量优化,同时适配了Gradle
的4.x-8.x
全部版本,理论上更新的版本或更老的版本也能支持,只是没有去测试。
老版本的TheRouter
提供了不少编译期选项,可以通过手动在local.properties
或gradle.properties
文件中配置。从1.2.3-rc1
版本开始,这些配置全部迁移到了app module的 build.gradle
内。你可以使用如下方式配置编译选项:
// 必须是app module内,引入 therouter 插件的 build.gradle 文件内
// 与android{}闭包同级,做编译配置
TheRouter {
// 是否开启调试模式,默认不开启
debug = false;
// 编译期检查路由表合法性,可选参数 warning(仅告警)/error(编译期抛异常)/delete(每次根据注解重新生成路由表),不配置则不校验
checkRouteMap = "";
// 检查 FlowTask 是否有循环引用,可选参数 warning(仅打印日志)/error(编译期抛异常),不配置则不校验
checkFlowDepend = "";
// 图形化输出当前的 FlowTask 依赖图,不配则不输出
showFlowDepend = true;
}
从1.2.3-rc1
版本开始,所有编译均采用增量编译,且不再依赖Gradle
的增量配置,所有增量均由框架内部实现,每次编译时会校验编译jar
包与缓存数据是否一致,如果不一致才会去扫描有变更的jar
包。因此,才能做到编译速度大幅提升。
缓存路径在:/app/build/therouter目录下。
注:编译缓存仅在debug
模式才会启用,你需要在 build.gradle
中开启调试模式(见步骤一)
老版本的TheRouter
,如果使用了一个不存在ServiceProvider
的Service
接口时,会默认创建一个接口的空实现类来避免空指针。但实际应用起来发现,并不能降低空指针的概率,反倒将原本应该在开发阶段就发现的问题延到了线上才发现。
从1.2.3-rc1
开始,如果没有声明@ServiceProvider
的接口,调用TheRouter.get()
时,将会直接返回null
。
从1.2.3-rc1
版本开始,使用KSP
处理注解也支持增量编译了。二次编译时,不会再次遍历全部类,而是只处理变更文件。
本优化由 @hust-twj 提供,详情查看:https://github.com/HuolalaTech/hll-wp-therouter-android/pull/184
使用前,需要在gradle.properties
内开启 KSP 的增量编译。
ksp.incremental=true
ksp.incremental.log=true
ksp.incremental.intermodule=true
由于使用了1.9.21-1.0.16
版本的KSP(已经是能支持增量编译的最低版本),必须将Kotlin版本也升级到1.9.21
,因此无法再兼容AGP4
的编译。
推荐你采用项目demo一致的 Gradle 版本号和 AGP 版本号。
Gradle Version:https://github.com/HuolalaTech/hll-wp-therouter-android/blob/dev/gradle/wrapper/gradle-wrapper.properties
AGP Version:https://github.com/HuolalaTech/hll-wp-therouter-android/blob/dev/build.gradle
老版本的 TheRouter 采用了 Gradle 标准 API,在插件内会将所有的 jar 和 class 聚合成一个,造成编译速度非常慢。
新版本采用了一个全新的方案,在标准 API 的基础上,最大幅度降低了编译耗时,但是首次编译或每次新增删除模块的时候,都需要重写构建一次。
详细方案请见: https://kymjs.com/code/2024/10/31/01/