Code Monkey home page Code Monkey logo

grouter-android's Introduction

GRouter - Android 结构化路由框架

Maven Central

相对于基于字符串的路由框架(ARouter)而言,结构化路由框架具备面向对象、中心化的特点,如果我们需要跳转到一个Activity,ARouter 得先去查找这个页面的路径是什么、接收什么参数、参数的格式和用途是什么。而结构化路由框架则会自动生成一个中心类,把所有的页面调用都集成进去,有什么页面都清晰明了,每一个Activity都会生成一个Builder类,有什么参数,参数的作用都会注释清晰,不用担心会传错参数。解决Activity参数调整,字符串路由框架容易出现严重的调用异常问题。

  • 其它路由框架跳转Activity,需要找到Activity的路径,拼接成url跳转,而 GRouter 会生成中心化调用类,为每一个Activity生成调用方法;
  • 其它路由框架跳转Activity传参时需要知道参数名称和类型,而 GRouter 为每一个Activity生成一个Builder类,生成相应的参数方法,无需担心参数名称和类型写错,也不用担心后续 Activity 调整后导致url跳转异常。

特点

  1. 支持FlutterHybrid H5混合项目,可以通过URL调用原生模块获取服务数据、跳转Activity。
  2. 支持多Module项目、多工程项目;多工程项目支持多scheme。
  3. Activity 跳转支持设置默认转场动画,支持设置单次转场动画,支持指定 Flag,支持多级跳转
  4. Activity、Fragment、Task支持参数注入,无需手动解析参数。
  5. 提供RouterComponent、RouterTask、RouterDelegate三种强大的组件间调用服务组件。
  6. 支持生成HTML文档和导入RAP,方便查询。
  7. 支持服务降级,支持通过服务降级Mock数据,可以实现单Module运行调试,提高开发效率。
  8. 各个组件均支持自动生成构造器,避免拼接参数容易写错问题。
  9. 提供 IDEA 插件,支持快捷跳转到目标类,支持 Java 和 Kotlin。
  10. 使用Gradle插件注册Module模块,简化配置。
  11. RouterComponent支持获取Fragment。
  12. 支持从外部浏览器和其它APP打开内部Activity
  13. 内置5组页面Activity过场动画,并支持5.0的Activity过场动画。

GRouter已经在拥有434个Activity、28个Module的千万用户级别APP稳定使用。GRouter 会一直致力于组件化解决方案,如果你有更好的建议,可以提Issues或私聊联系我。

示例下载

示例APP下载

grouter

文档

查看文档

示例

Activity 页面跳转

// 不推荐
GRouter.getInstance().startActivity(context, "grouter://activity/user?uid=1")
// 不推荐
GRouter.getInstance().activityBuilder("user").put("uid",1).start(context)
// 推荐
GActivityCenter.UserActivity().uid(123).start(context)

下沉接口式 - 组件间服务调用

// 不推荐
val userService = GRouter.getInstance().getComponent("userService") as UserService
// 不推荐
val userService = GRouter.getInstance().getComponent("userService",UserService::class.java)
// 推荐
val userService = GComponentCenter.UserServiceImpl()

非下沉式 - 组件间单任务调用

// 不推荐
val response = GRouter.getInstance().taskBuilder("grouter://task/getUser?uid=1").execute()
// 不推荐
val response = GRouter.getInstance().taskBuilder("getUser").put("uid",1).execute()
// 推荐
val response = GTaskCenter.GetUserTask().uid(1).execute()
// 获取返回值
val user = response.value(User::class.java)

非下沉式 - 反射代理服务

val accountServiceDelegate = GDelegateCenter.AccountService(context)

License

Copyright 2019 taoweiji

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

   http://www.apache.org/licenses/LICENSE-2.0

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.

grouter-android's People

Contributors

taoweiji avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

grouter-android's Issues

RouterHelper在哪?

在对应的包下没有找到RouterHelper,RouterHelper在哪?项目跑步起来啊!

注解的问题

看了下源码,是运行时注解,其实这个应该用编译时注解。您用运行时注解,这里面是有什么原因吗?

看了之后的反馈....

简单的看了下. 我这里有以下几个疑问:

  1. 首先项目整个拉取之后没有可以跑的 App, 当然你肯定说怎么样怎么样配置一下就可以了, 但对于用于来说是不是你把所有的配置好, 我们拉取下来就能运行看效果会更好呢?

  2. 你的注入整个是通过反射去做的. 这个怎么说?我感觉这点也太扯了吧....

  3. 组件化项目不包含某个 module 能否运行的问题

  • App 壳工程

    • Module1

    • Module2
      当项目是如上的依赖的时候, 正常运行, 如果我不依赖 Module2, 直接运行 App 会报错吗?

      为啥会有这样子的需求?其实使我们开发希望我自己测试的时候, 希望可以把那些无关的 Module 暂时排除, 不参与打包, 这样子可以提升运行速度. 我简单的看了下作者你的项目, 感觉好像少个 Module 不可以的呀. 有空做一下回复, 我好了解一下.

  1. 另一个问题是, 你为了参数拼接的问题, 我对比很多框架发现, 有两个框架 ARetrofitComponent 是通过类似于 Retrofit Api 的方式做的. 我觉得也 OK 的, 另外你的这样子也是很好地.

  2. 登陆、定位. 这些进入界面的前置跳转, 我看你拦截器是声明了类似于白名单的列表. 你不觉得这样子不仅这个列表需要维护. 也增加了每一个开发人员的工作吗. ARouter 可以通过 extra 去做, 而其他一些框架有提供页面拦截器之类的功能, 我觉得这点是做得不够的.而且你的设计会让跳转不流畅. 假如目前没有登录, 你跳转 B 界面, 你会跳转到登录界面. 当用户登录了, 之前的跳转还需要发起一次. 你没觉得这点也是可以优化的吗? 理论上, 登录拦截器中应该是自动完成了登录, 登录成功会继续之前的跳转. 我觉得这点你可以参考下 Component 中拦截器的设计, 这点我看它这里做的很好

  3. 另外你的源码中示例 Module 就一个, 最好弄多个 module 协同工作的吧, 更好的体现组件化.

  4. 跨组件调用这块感觉还可以, 但是我有一个疑问, 你所谓的 安全构造器 是生成代码的方式吧?如果是的话, 你是怎么让所有模块都能调用类似于 val userService = GComponentCenter.UserServiceImpl() 这句代码的. 难道生成到了 Base? 还是咋滴, 如果可以请告诉我一下!

  5. 感觉问题还是挺多的, 感觉不像你说的千万级别的 App 应该有的样子呀. 目前对比下来还是 ARouterComponent 比较符合我的预期. 希望加油呀!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.