1.2.3版本编译改动


背景

1.2.3-rc1版本开始,我们对TheRouter编译过程做了大量优化,同时适配了Gradle4.x-8.x全部版本,理论上更新的版本或更老的版本也能支持,只是没有去测试。



改动一:编译期选项

老版本的TheRouter提供了不少编译期选项,可以通过手动在local.propertiesgradle.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,如果使用了一个不存在ServiceProviderService接口时,会默认创建一个接口的空实现类来避免空指针。但实际应用起来发现,并不能降低空指针的概率,反倒将原本应该在开发阶段就发现的问题延到了线上才发现。
1.2.3-rc1开始,如果没有声明@ServiceProvider的接口,调用TheRouter.get()时,将会直接返回null



改动四:优化 KSP 编译速度

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



改动五:不再兼容AGP4

由于使用了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


改动六:AGP8 编译提速

老版本的 TheRouter 采用了 Gradle 标准 API,在插件内会将所有的 jar 和 class 聚合成一个,造成编译速度非常慢。

新版本采用了一个全新的方案,在标准 API 的基础上,最大幅度降低了编译耗时,但是首次编译或每次新增删除模块的时候,都需要重写构建一次。

详细方案请见: https://kymjs.com/code/2024/10/31/01/


相关推荐:

为 TheRouter 的 AGP8 编译加个速为 TheRouter 的 AGP8 编译加个速

内容请见: 《为 TheRouter 的 AGP8 编译加个速》 [https://kymjs.com/code/2024/10/31/01/](...

1 mins
TheRouterSwift iOS 路由介绍TheRouterSwift iOS 路由介绍

TheRouterSwift是货拉拉TheRouter系列开源框架的Swift版本,为日益增多的Swift开发者提供一高可用路由框架。TheRouterSwift用于模块间解耦和通信,基于Swift协议进行动态懒加载注册路由与打开路由的工具。同时支持通过Service-Protocol寻找对应的模块,并用 protocol进行依赖注入和模块通信。

19 mins
TheRouter iOS 路由介绍TheRouter iOS 路由介绍

TheRouter 是货拉拉打造的一款同时支持 Android 及 iOS 的轻量级路由中间件,在iOS端吸取了其他其他语言的特性,支持注解功能,极大提升了路由在iOS端的使用体感。摒弃了传统 iOSer 的 target-action 或 protocol 理念,向更广的后台或 Android 应用对齐。

5 mins