前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SimpleRouter Android组件化路由库,支持模块间通信

SimpleRouter Android组件化路由库,支持模块间通信

原创
作者头像
无辛
发布2023-06-26 10:11:15
1560
发布2023-06-26 10:11:15
举报

SimpleRouter

代码语言:txt
复制
    Android组件化路由库,支持模块间通信、路由拦截、全局降级等,适用于中小型项目

最新版本

模块

srouter-annotation

srouter-compiler

srouter-api

版本

Demo展示

Demo apk下载
demo
demo

接入方式

1、在build.gradle文件中添加依赖和配置

参数示意:

代码语言:txt
复制
> SIMPLE_ROUTER_KEY   ->   配置生成的路由文件加密秘钥,长度为16个字
> OPEN_AES            ->   是否开启加密
> SROUTER_ANNOTATION  ->   annotation版本号(查看上面最新版本)
> SROUTER_API         ->   api版本号(查看上面最新版本)
> SROUTER_COMPILER    ->   compiler版本号(查看上面最新版本)

代码配置:

代码语言:text
复制
plugins {
   id 'kotlin-kapt'
}
android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                        SIMPLE_ROUTER_KEY: project.ext.simpleRouterKey,
                        OPEN_AES         : project.ext.openAes
                ]
            }
        }
    }
}
dependencies {
    implementation "com.github.jeff-liu14:srouter-annotation:$SROUTER_ANNOTATION"
    implementation "com.github.jeff-liu14:srouter-api:$SROUTER_API"
    kapt "com.github.jeff-liu14:srouter-compiler:$SROUTER_COMPILER"
}

2、在需要的Activity/Fragment中添加注解

代码语言:text
复制
#activity
@Route(path = "/app/home")
class MainActivity : AppCompatActivity() {}       
# fragment
@Route(path = "/app/demo/product/fragment")
class ProductFragment : Fragment() {}

3、初始化SDK

代码语言:text
复制
SimpleRouter.init(this)
SimpleRouter.scanRoute(BuildConfig.SIMPLE_ROUTER_KEY, BuildConfig.OPEN_AES)

4、路由跳转操作

代码语言:text
复制
//无参跳转
SimpleRouter.getInstance()
            .build("/app/demo/profile")
            .navigate(this)
//带参跳转
SimpleRouter.getInstance()
            .build("/app/demo/profile")
            .withString("name", "app-profile:透传参数")
            .navigate(this)     

5、混淆(Proguard)规则

代码语言:txt
复制
#FastJson
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.**{*; }
#SimpleRouter
-keep class * extends com.laydown.srouter.api.provider.IProvider

API详解

具体使用方法可参考示例

1、手动加载路由文件

代码语言:text
复制
SimpleRouter.getInstance()
            .scanRoute(BuildConfig.SIMPLE_ROUTER_KEY, BuildConfig.OPEN_AES)

2、无参跳转方法

代码语言:text
复制
SimpleRouter.getInstance()
            .build("/app/demo/profile")
            .navigate(this)

3、有参构造方法

代码语言:text
复制
// 基础数据类型 String boolean int long float
SimpleRouter.getInstance()
            .build("/app/demo/profile")
            .withString("name", "app-profile:透传参数")
            .navigate(this)
// 使用Bundle
SimpleRouter.getInstance()
            .build("/app/demo/profile")
            .withBundle(Bundle().apply {
                putString("name", "app-profile:透传参数")
            })
            .navigate(this)

4、startActivityForResult

代码语言:txt
复制
// 旧版跳转
SimpleRouter.getInstance()
             .build("/app/demo/product")
             .withString("name", "app-product:透传参数")
             .navigateForResult(this, 10001)  
// 使用ActivityResultLauncher
val launcher: ActivityResultLauncher<Intent> =
         Helper.startActivityForResult(this) { result ->
             when (result?.resultCode) {
                 RESULT_OK -> {
                    Toast.makeText(
                          this, result.data?.extras?.getString("uName"), Toast.LENGTH_SHORT
                         ).show()
                     }
                 }
             }    
// 使用SimpleRouter获取构造的intent
SimpleRouter.getInstance()
            .build("/app/demo/product")
            .withString("name", "app-product:透传参数")
            .navigateForResultX(this, launcher)    

5、获取Fragment

代码语言:txt
复制
private fun setFragment() {
    val transaction = supportFragmentManager.beginTransaction()
    val fragment =
        SimpleRouter.getInstance()
            .build("/app/demo/product/fragment")
            .withString("name", intent.extras?.getString("name"))
            .navigate() as Fragment
    fragment.arguments = intent.extras
    transaction.add(R.id.fl_content, fragment, fragment.javaClass.simpleName)
    transaction.commitNowAllowingStateLoss()
}

6、使用provider实现module对外发布ability

代码语言:txt
复制
    //在lib-provider中定义biz-tax模块对外发布的接口
    public interface ITaxProvider extends IProvider {
           void sayHello(String message);
    }

    /**
     * 在biz-tax模块中实现ITaxProvider接口
     * 并且使用@Route标签注册服务
     */
    @Route(path = "/tax/provider")
    public class TaxProviderImpl implements ITaxProvider {
        private Context mContext;

        @Override
        public void sayHello(String message) {
            Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void init(Context context) {
            this.mContext = context;
        }
    }

    //在biz-shop模块中获取服务并调用
     val provider: ITaxProvider = SimpleRouter.getInstance()
                     .build("/tax/provider")
                     .navigate(this@ShopActivity) as ITaxProvider
     provider.sayHello("ShopActivity call Tax Provider")

7、全局降级策略

代码语言:txt
复制
    //实现全局降级策略服务接口DegradeService
    class CommonDegradeImpl : DegradeService {
           override fun onLost(context: Context, targetMeta: TargetMeta) {
               Toast.makeText(context, "Path: " + targetMeta.path + " Lost.", Toast.LENGTH_SHORT).show()
           }
    }

    //在SimpleRouter中进行注册
    SimpleRouter.setDegradeService(CommonDegradeImpl())

8、全局拦截策略

代码语言:txt
复制
    //实现全局拦截策略服务接口InterceptorCallBack
    //return false-页面跳转被拦截 true-继续进行路由操作
    class CommonInterceptorImpl : InterceptorCallBack {
        override fun onContinue(context: Context, targetMeta: TargetMeta): Boolean {
            when (targetMeta.path) {
                "/app/demo/product1" -> {
                    Toast.makeText(context, "Product页面被拦截", Toast.LENGTH_SHORT).show()
                    return false
                }
                "/app/demo/profile" -> {
                    Toast.makeText(context, "Profile页面被拦截", Toast.LENGTH_SHORT).show()
                    return false
                }
            }
            return true
        }
     }
     //在SimpleRouter中注册 
     SimpleRouter.setInterceptorCallBack(CommonInterceptorImpl())

源码地址:https://github.com/jeff-liu14/SimpleRouter

欢迎大家多多star,也可以参与共同维护

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SimpleRouter
    • 最新版本
      • Demo展示
        • 接入方式
          • API详解
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档