安卓路由技术选型调研

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

一、路由库选型数据

目前看起来基本的功能都过得去,框架也是大体差不多,互相借鉴的,也都支持路由拦截,回调式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")
相关推荐
longxibo8 小时前
【AIBIZ低代码平台:能长出业务系统的平台】
android·低代码·rxjava
AI_Gump16 小时前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek
疯华整猫21 小时前
否决 Flutter 提案那天,我发现自己也说不清 Framework 管什么
android
传奇开心果编程1 天前
【Flutter踩坑排雷】第25课:ScrollController 误用坑|跳转失效、监听泄漏与“控制器未附加”
android·flutter·ios·移动开发·跨平台·dart·声明式ui
慕容雪_2 天前
Capacitor8-Android打包完整手册
android·打包·capacitor
阿杰m2 天前
Android源码第十三章:Bluetooth——沿一次发现走到控制器
android
booboosui2 天前
派活给另一个 AI:前后两次文件夹快照,就是交付清单
android
普通人62 天前
MySQL_FIND_IN_SET函数详解
android·数据库·mysql
好的佩奇2 天前
Dart 之集合元素
android·flutter·dart
Easyhood2 天前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose