Android 开发路由框架(一)(路由库简介与环境搭建)

一、什么是路由库?

路由库是一种用于在 Android 应用中管理页面跳转和组件通信的工具,它可以帮助开发者实现:

  • 解耦:页面之间的跳转不再需要直接依赖具体的 Activity/Fragment 类
  • 灵活配置:支持动态路由、拦截器、降级策略等高级功能
  • 统一管理:集中管理所有路由配置,便于维护和扩展
  • 类型安全:支持编译时检查,减少运行时错误

二、本路由库的特点

本路由库是一个轻量级、功能强大的 Android 路由框架,具有以下特点:

  1. 注解驱动 :使用简洁的注解标记需要路由的页面和参数
  2. 编译时生成 :通过注解处理器在编译时生成路由表,无运行时反射开销
  3. 类型安全 :支持参数自动注入和类型检查
  4. 功能丰富 :支持 Activity、Fragment 路由,拦截器,降级策略等
  5. 易于扩展 :模块化设计,易于定制和扩展

三、库的模块结构

本路由库由以下几个核心模块组成:

image.png

四、环境搭建

1. 创建 Android 项目

首先,创建一个新的 Android 项目,或者在现有项目中集成路由库。

2. 集成路由库 方法一:本地依赖(推荐用于开发和调试)

  1. 将路由库模块复制到项目根目录
  2. 在 settings.gradle.kts 中添加模块引用:
include(":app")
include(":route-annotation")
include(":route-core")
include(":route-api")
// 如果需要使用插件,还需添加:
// include(":route-plugin"

在 app/build.gradle.kts 中添加依赖:

dependencies {
    // 注解依赖
    implementation(project(":route-annotation"))
    // 路由核心依赖
    implementation(project(":route-core"))
    // 路由 API 依赖
    implementation(project(":route-api"))
    // 注解处理器依赖
    kapt(project(":route-core"))
}

方法二:远程依赖(推荐用于生产环境)
在 settings.gradle.kts 中添加 JitPack 仓库:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven { url = uri("https://jitpack.io") }
    }
}

在 app/build.gradle.kts 中添加依赖(使用符合 Gitee 标签命名要求的版本号)

    implementation("com.gitee.nextT.route:route-annotation:v1.3.0")
//
//        // 路由核心模块
    implementation("com.gitee.nextT.route:route-api:v1.3.0")
//
//        // 路由 API 模块
    implementation("com.gitee.nextT.route:route-core:v1.3.0")
    kapt("com.gitee.nextT.route:route-core:v1.3.0")
// 如果需要使用插件,还需添加:
  //  kapt("com.gitee.nextT.route:route-plugin:v1.3.0")

3. 基本配置

在 app/build.gradle.kts 中添加 kapt 配置:

// kapt 块(放在顶层,与 android 块同级)
kapt {
    arguments {
        // 传递模块名参数(值为当前模块名称)
        arg("ROUTE_MODULE_NAME", "app")
    }
}

// 如果需要使用插件,还需添加:
在项目的根目录添加

 classpath("com.android.tools.build:gradle:8.0.2")
classpath("com.gitee.nextT.route:com.isheji.router.plugin.gradle.plugin:v1.3.0")

混淆

# ============================================
# 1. 保留所有路由注解
# ============================================
-keepattributes *Annotation*
-keep @com.isheji.route_annotation.IRoute class * { *; }
-keep @com.isheji.route_annotation.RouteMethod class * { *; }
-keep @com.isheji.route_annotation.RouteInterceptor class * { *; }
-keep @com.isheji.route_annotation.RouteParam class * { *; }

# ============================================
# 2. 保留路由核心类
# ============================================
-keep class com.isheji.route_core.core.RouterCore { *; }
-keep class com.isheji.route_core.model.RouteParamCore { *; }
-keep class com.isheji.route_api.IRouterManager { *; }
-keep class com.isheji.route_core.model.RouteRequest { *; }
-keep class com.isheji.route_core.model.NavigationResult { *; }

# ============================================
# 3. 保留所有 SPI 实现类(重要!)
# ============================================
-keep class * implements com.isheji.route_core.api.IRouteTable { *; }
-keep class * implements com.isheji.route_core.api.IRouteMethod { *; }
-keep class * implements com.isheji.route_core.api.IRouteInterceptor { *; }
-keep class * implements com.isheji.route_core.IRouteParamInjector { *; }
-keep class * implements com.isheji.route_core.api.IDegradeStrategy { *; }

# ============================================
# 4. 保留自动生成的路由表类
# ============================================
-keep class com.isheji.route_core.autogen.UnifiedRouteTable_* { *; }
-keep class com.isheji.route_core.autogen.RouteRegister_* { *; }
-keep class com.isheji.route_core.generated.RouteMethod_* { *; }
-keep class com.isheji.route_core.generated.RouteMethodRegistry { *; }
-keep class com.isheji.route_core.generated.ParamInjector_* { *; }

# ============================================
# 5. 保留路由注册方法
# ============================================
-keepclassmembers class * {
    public void register();
    public static void registerRoutes();
    public static void registerMethods();
    public static void registerInjectors();
}

# ============================================
# 6. 保留被 @RouteParam 注解的字段
# ============================================
-keepclassmembers class * {
    @com.isheji.route_annotation.RouteParam <fields>;
}

# ============================================
# 7. 保留被 @RouteMethod 注解的方法
# ============================================
-keepclassmembers class * {
    @com.isheji.route_annotation.RouteMethod <methods>;
}

# ============================================
# 8. 保留拦截器类
# ============================================
-keep class * implements com.isheji.route_core.api.IRouteInterceptor {
    public <init>();
    public <methods>;
}

# ============================================
# 9. 保留降级策略类
# ============================================
-keep class * implements com.isheji.route_core.api.IDegradeStrategy {
    public <init>();
    public <methods>;
}

# ============================================
# 10. 保留 Kotlin 相关
# ============================================
-keepclassmembers class **$WhenMappings {
    <fields>;
}

-keep class kotlin.Metadata { *; }

-keepclassmembers class kotlin.Metadata {
    public <methods>;
}

# ============================================
# 11. 保留序列化相关
# ============================================
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    !static !transient <fields>;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

# ============================================
# 12. 保留枚举类
# ============================================
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

# ============================================
# 13. 保留泛型信息
# ============================================
-keepattributes Signature
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes EnclosingMethod

# ============================================
# 14. 保留调试信息(可选,用于定位问题)
# ============================================
-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile

# ============================================
# 15. 警告抑制(可选)
# ============================================
# 如果遇到警告,可以根据实际情况添加 -dontwarn
# -dontwarn com.isheji.route_core.**


五、验证环境搭建

  1. 同步 Gradle 项目
  2. 构建项目,确保没有编译错误
  3. 如果使用本地依赖,检查各模块是否正确导入
  4. 如果使用远程依赖,检查依赖是否成功下载
    至此,路由库的环境搭建已经完成,接下来我们将开始学习如何使用路由库实现页面跳转和参数传递。
    地址:https://gitee.com/nextT/route
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容