共计 4241 个字符,预计需要花费 11 分钟才能阅读完成。
SimpleRouter
Android 组件化路由库,反对模块间通信,实用于中小型我的项目.
最新版本
模块 | srouter-annotation | srouter-compiler | srouter-api |
---|---|---|---|
版本 |
Demo 展现
Demo apk 下载
接入形式
-
在 build.gradle 文件中增加依赖和配置
参数示意:
> SIMPLE_ROUTER_KEY -> 配置生成的路由文件加密秘钥,长度为 16 个字 > OPEN_AES -> 是否开启加密 > SROUTER_ANNOTATION -> annotation 版本号(查看下面最新版本) > SROUTER_API -> api 版本号(查看下面最新版本) > SROUTER_COMPILER -> compiler 版本号(查看下面最新版本)
代码配置:
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" }
-
在须要的 Activity/Fragment 中增加注解
#activity @Route(path = "/app/home") class MainActivity : AppCompatActivity() {} # fragment @Route(path = "/app/demo/product/fragment") class ProductFragment : Fragment() {}
-
初始化 SDK
SimpleRouter.init(this) SimpleRouter.scanRoute(BuildConfig.SIMPLE_ROUTER_KEY, BuildConfig.OPEN_AES)
-
路由跳转操作
// 无参跳转 SimpleRouter.getInstance() .build("/app/demo/profile") .navigate(this) // 带参跳转 SimpleRouter.getInstance() .build("/app/demo/profile") .withString("name", "app-profile: 透传参数") .navigate(this)
-
混同 (Proguard) 规定
#FastJson -dontwarn com.alibaba.fastjson.** -keep class com.alibaba.fastjson.**{*;} #SimpleRouter -keep class * extends com.laydown.srouter.api.provider.IProvider
API 详解
具体应用办法可参考示例
-
手动加载路由文件
SimpleRouter.getInstance() .scanRoute(BuildConfig.SIMPLE_ROUTER_KEY, BuildConfig.OPEN_AES)
-
无参跳转办法
SimpleRouter.getInstance() .build("/app/demo/profile") .navigate(this)
-
有参构造方法
// 根底数据类型 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)
-
startActivityForResult
// 旧版跳转 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)
-
获取 Fragment
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()}
-
应用 provider 实现 module 对外公布 ability
// 在 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")
-
全局降级策略
// 实现全局降级策略服务接口 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())
-
全局拦挡策略
// 实现全局拦挡策略服务接口 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,也能够参加独特保护
正文完