Jet RouterKit

路由库;Android平台对页面、服务的路由框架。自动化且易用。

基于APT技术(注解-编译时生成代码,不反射,无性能损耗),通过注解方式来实现URL打开Activity功能或 执行特定动作

并支持在WebView和外部浏览器使用,支持路由表维护,降级访问等;

使用Jet技术支持Bundle、Intent,Uri参数自动注入页面并转换参数类型。

方案对比

实现功能

RouterKit

Airbnb 的DeepLinkDispatch

阿里 ARouter

天猫 统跳协议

ActivityRouterGithub上Star最多

路由注册

注解式APT自动注册

每个module都要手动注册

每个module的路由表都要APT类查找

AndroidManiFest配置

每个module都要手动注册

路由查找

路由表

路由表

路由表

系统Intent

路由表

路由分发

Activity转发

Activity转发

Activity转发

Activity转发

Activity转发

动态替换

主线程

不支持

线程等待

不支持

不支持

动态拦截

主线程

不支持

线程等待

不支持

主线程

安全拦截

主线程

不支持

线程等待

不支持

主线程

方法调用

手动拼装

手动拼装

手动拼装

手动拼装

手动拼装

参数获取

JET 依赖自动注入,支持所有类型

参数定义在path,不利于多人协作

Apt依赖注入,但是要手动调用get方法

手动调用

手动调用

结果返回

onActivityResult

onActivityResult

onActivityResult

onActivityResult

onActivityResult

支持多Module

支持

不支持

支持

不支持

支持

整体类似 阿里开源的ARoute 功能;移除分组概念,强化多Module编译和自动注册路由表,会更通用。

特色:

支持注解方式,APT编译器自动注册Activity 和Action(类似Struts里面的Action)

支持自动注入Intent,Bundle、Uri里的参数到页面使用Jet

支持外部浏览器打开。

支持HTTP协议。

支持多个Module。

支持Uri 跳转和 Action 执行;

路由表自动初始化,也可以手动再维护;

支持服务端下发路由配置,简单支持页面降级功能;

功能:

Apt实现自动路由注册,支持多Module

路由表维护

Activity转发 和 Action转发(支持URI页面跳转和方法调用)

原理图

典型应用

从外部URL映射到内部页面,以及参数传递与解析

跨模块页面跳转,模块间解耦

拦截跳转过程,处理登陆、埋点等逻辑

跨模块API调用,通过控制反转来做组件解耦

使用范例

声明1: 页面跳转

@JUri("/home")

public class IntentActivity extends AppCompatActivity {

// Uri 的参数通过 Intent传递进来, 推荐使用Jet自动读取;

.....

//

}

or 声明2: 服务功能调用:

//支持,多个地址 @JUri(array={"/home","/action"})

@JUri("/action")

public class TestAction extends Action {

Context context = MyApplication.getContext();

@Override

public void run(Map queryMap) {

super.run(queryMap);

//Uri 里面的参数通过Map传递进来

String result = (String) queryMap.get("param");

Toast.makeText(context, "Test Action: " + result, Toast.LENGTH_SHORT).show();

}

}

方法调用

// 尽可能早,推荐在Application中初始化,初始化路由表

Router.getInstance().init(mApplication);

// 方式一

String uri = "meiyou:///home";

Router.getInstance().run(uri);

// 方式二

Router.getInstance().run(context, Uri.parse("meiyou:///second?uid=233"));

// 方式三

// 如果AndroidManifest.xml注册了RouterCenterActivity,也可以通过下面的方式打开,如果是APP内部使用,不建议使用。

// startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("meiyou:///home?uid=233")));

从外部浏览器、其它APP打开

只要在AndroidManifest.xml注册了RouterCenterActivity,即可变成经典的Uri打开,可以支持外部浏览器、其它APP打开内部的Activity。

// Java代码调用

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("meiyou:///second?uid=233&name=Wiki")));

// HTML方式,系统浏览器(不支持微信,微信内部开网页会禁止所有的Scheme)

打开JoyrunApp的SecondActivity

支持拦截器,典型应用就是:某些URI需要授权才能访问

通过前置拦截器可以对URL进行拦截,可以通过拦截器对URL进行修改,也可以拦截URL,不让路由器打开。

Router.addInterceptor(new UriInterceptor() {

public String beforeExecute(InterceptorData data) {

//return url.replace("test://www.XXX.com/","test://");

return data;

}

});

支持 设置Scheme ,只有允许的Scheme才有效;才允许路由分发

Router.addScheme("meiyou");

集成

在gradle文件配置:

//内部版本:0.0.1-SNAPSHOT

compile "com.meiyou.framework:router:1.0.0"

混淆

常见问题

TODO

JUri 支持数组数据(fixed)

Module传递依赖解决 (fixed)

自定义 注解实现,可以再自定义额外的路由表,实现自定义的注解的路由,Door接口的优化

Gradle Plugin实现,APT 主工程 需要配置编译过程问题

拦截器排序,优先级 priority

路由匹配规则Matcher功能升级, Pattern 模式匹配

调用方式接口化,like: retrofit;

路由结果回调? isNeed?

Kotlin版本实现

路由表初始化异步线程化

安全性

like Express, 拦截器,中间件化?

交流群:

QQ群:547612870

License

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

android自动路由,GitHub - greatzi/RouterKit: 又一个路由库;Android平台对页面、服务的路由框架。自动化且易用。...相关推荐

  1. android picasso源码下载,Picasso:一个专为Android制作的强大的图片下载和缓存库

    Picasso:一个专为Android打造的强大的图片下载和缓存库 简介 在Android应用中,图片消费了大量的资源,却为应用提供了很好的视觉体验.幸运的是,Picasso为你的应用提供了非常容易的 ...

  2. python自动上传图片_使用Python实现一个简单的图片上传存储服务

    使用flask实现的一个简单的图片上传服务 设计初衷 对于图片的存储,有很多选择,一般采用云服务如(七牛,又拍等),但是国内的服务像七牛 自定义域名竟然需要域名备案(Excuse me,当初就是因为备 ...

  3. android串口工具apk_【APK】一个强大的Android开发工具!

    排版|设计|配图©孤狼小航 Android开发助手是个强大的Android开发工具,能够用来反编译其他应用.查看其他应用布局和控件信息.屏幕取色(颜色取样器).查看Activity历史记录.查看应用M ...

  4. android限速 编程,GitHub - renjingc/TrafficSignsRecognition: 基于深度学习的android端交通牌标志检测与识别...

    TrafficSignsRecognition 基于android断的限速牌识别,并且实时地报出限速数字,并且只报一次 程序使用android studio开发,使用的语言是java和c++混合编程的 ...

  5. android 自动打包脚本,cocos2d-x学习笔记(十)android自动化打包bat脚本

    1.先按照cocos2d-x的环境配置要求(ant等)安装好,然后在安卓目录下proj.android新建build.bat,脚本如下:@echo off echo 准备开始 echo 设置路径 se ...

  6. android自动打开微信朋友圈,求大神告知Android微信朋友圈界面代码

    满意答案 plarpgricle 2018.12.17 采纳率:58%    等级:10 已帮助:5570人 <?xml  version="1.0" encoding=&q ...

  7. SiteMesh:一个优于Apache Tiles的Web页面布局、装饰框架

    一.SiteMesh项目简介 OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration) 的框架组件,能够帮助网站开发人员较 ...

  8. GitHub上史上最全的Android开源项目分类汇总 (转)

    GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...

  9. Android自动朗读(TTS)的实现

    Android自动朗读(TTS)的实现 前言: Android提供了自动朗读支持.可以对指定文本内容进行朗读,从而发生声音:还允许把文本对应的音频录制成音频文件,方便以后播放.Android的自动朗读 ...

最新文章

  1. linux 网络状态表 /proc/net/tcp 各项参数说明
  2. 网络推广专员教大家网站SEO优化中锚文本的使用技巧
  3. 【Android 逆向】代码调试器开发 ( ptrace 函数 | 向进程内存写出数据 )
  4. Java虚拟机简单介绍
  5. android xml事件,安卓事件
  6. SharePoint PowerShell命令系列
  7. hdoj 1015 Safecracker
  8. c语言读取excel表格_利用pandas处理excel表格
  9. 竞彩足球混合过关赔率API调用示例代码
  10. matlab mpopt,matpower安装到MATLAB下遇到的问题
  11. 带你啃透深度学习必学“圣经”花书!(附带论文代码精读讲解)
  12. oracle yum配置本地源,oel 7 本地yum源配置
  13. “天天向上“py代码
  14. 电池相关---电池保护
  15. 自建具备全文搜索能力的git server
  16. matplotlib画图使用python可视化colorbar工具自定义颜色
  17. 智能卡操作系统COS概述
  18. 《全息离我们有多远》
  19. 申报山西省“专精特新”中小企业需要具备哪些条件?
  20. Eclipse debug调试下按钮变灰

热门文章

  1. 大多数可穿戴设备的基本原理总结
  2. linux 反弹 socket,反弹shell基础
  3. Leecode刷题热题HOT100(2)——两数相加
  4. Leecode刷题热题HOT100(3)——无重复字符最长子串
  5. OpenShift 4 之通过Dockerfile部署容器应用
  6. (五)深度学习和ResNet50的COVID-19诊断结果
  7. 微软首款 Office 应用程序登陆 Linux
  8. Android 11 将推出系统试用功能,满意后再正式安装
  9. 使用SQL数据库在Python中执行CRUD操作
  10. 百度地图手机和电脑不一致_手机能下载北斗星导航吗?比高德地图和百度地图好用吗?...