安卓路由技术选型调研

本文侧重调研安卓路由框架,以及简单使用对比,适合不熟悉的人快速上手查字典。

一、路由库选型数据

目前看起来基本的功能都过得去,框架也是大体差不多,互相借鉴的,也都支持路由拦截,回调式onActivityResult等便捷功能。所以这里只做数据展示

选型 所属 更新时间 维护状态 Star 技术文章
ARouter 阿里 2020 - 10 功能冻结 / 基本停更GitHub,最高兼容 AGP 7.x 14.5k 稀土掘金
TheRouter 货拉拉 2026 - 03 活跃维护,支持 Android 15、AGP 9 1.3k 知乎、稀土掘金
WMRouter 美团 2021 稳定维护,支持 Kotlin 协程 2.4k 美团技术团队
DRouter 滴滴 2023 - 12 基本停更,功能稳定 777 稀土掘金

目前看起来只有TheRouter维护比较积极,所以后面只好简单分析下TheRouter

二、TheRouter快速上手

TheRouter最简单demo示例

1、基础使用

1、添加依赖

app/build.gradle新增依赖

groovy 复制代码
plugins {
    id 'therouter'
}
dependencies {
    implementation 'cn.therouter:router:1.3.2'
    annotationProcessor 'cn.therouter:apt:1.3.2'
}

根目录build.gradle

groovy 复制代码
// 语法要求buildscript必须放最plugins顶部
buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "cn.therouter:plugin:1.3.2"
    }
}
2、框架初始化

Application onCreate中初始化

java 复制代码
TheRouter.init(this);
TheRouter.setDebug(true);

页面 onCreate注册 (建议在BaseActivity、BaseFragment统一处理)

复制代码
TheRouter.inject(this);
3、使用

要跳转的页面注解@Route

java 复制代码
import com.therouter.demo.R;
import com.therouter.router.Autowired;
import com.therouter.router.Route;

@Route(path = "router://home")
public class HomeActivity extends BaseActivity {

    @Autowired
    String name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        TextView tvName = findViewById(R.id.tv_name);
        tvName.setText("欢迎:" + name);
    }
}
4、页面跳转回调功能
java 复制代码
TheRouter.build("router://home")
        .withString("name", "TheRouter Java Demo")
        .navigation(this,new NavigationCallback(){
            
        });
5、统一拦截功能
java 复制代码
// 拦截器
NavigatorKt.setRouterInterceptor(new RouterInterceptor() {
    @Override
    public void process(@NonNull RouteItem routeItem, @NonNull InterceptorCallback interceptorCallback) {
        if (false){
            Toast.makeText(MainActivity.this, "未登录", Toast.LENGTH_SHORT).show();
        }
        interceptorCallback.onContinue(routeItem);
    }
});

2、跑通官方demo

扫码下载 (张涛没有提供二维码,自己打的包)

最小改动运行TheRouter官方demo

官方库

app/build.gradle.kts启动多dex支持

groovy 复制代码
defaultConfig {
    multiDexEnabled = true
}

根目录settings.gradle.kts替换

groovy 复制代码
pluginManagement {
    repositories {
        maven(url = "https://maven.aliyun.com/repository/google")
        maven(url = "https://maven.aliyun.com/repository/gradle-plugin")
        maven(url = "https://maven.aliyun.com/repository/public")
        maven(url = "https://maven.therouter.cn:8443/repository/maven-public/")
    }
}
plugins {
    id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        maven(url = "https://maven.aliyun.com/repository/google")
        maven(url = "https://maven.aliyun.com/repository/central")
        maven(url = "https://maven.therouter.cn:8443/repository/maven-public/")
    }
}

rootProject.name = "TheRouter"

// Include all modules directly
include(":app")
include(":business-a")
include(":business-b")
include(":business-base")
include(":compose")
include(":router")
include(":apt")
相关推荐
我不会插花弄玉28 分钟前
8. 复合查询【由浅入深-MySQL】
android·数据库·mysql
熊文豪31 分钟前
机器人开发者生态分析:行业分工变化与启元的定位
android·机器人·启元机器人
郑州光合科技余经理1 小时前
同城商城源码:商品库和订单库怎么随包交付
android·java·开发语言·后端·uni-app·php·ai编程
蒸鱼Yuzheng2 小时前
移动游戏功耗与能效归因:帧率、画质、温控和续航如何一起评估
android·性能测试·功耗优化·游戏性能·温控
hai_android3 小时前
Android 设备锁定:Kiosk Mode 实战
android·java·android jetpack
我不会插花弄玉3 小时前
9. 表的内连和外连【由浅入深-MySQL】
android·数据库·mysql
嘟哩DuliDuli3 小时前
剧本节点输入归一化:文本来源、版本与下游引用
android·人工智能·安全·ai·软件工程
high一马平川3 小时前
# SystemUI Dagger2 精读 · 第 2 章 @Inject:1200 处构造注入,和 1 处例外
android·java·kotlin
大熊的瓜地4 小时前
从0开始写android -完结篇
android