MCPcopy Index your code
hub / github.com/SilenceDut/Hub

github.com/SilenceDut/Hub @2.9.5

Chat with this repo
repository ↗ · DeepWiki ↗ · release 2.9.5 ↗ · + Follow
137 symbols 289 edges 42 files 42 documented · 31%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Hub

a concise di library which can avoid check null when want to invoke a implementation by interface

Project

It had been used in project KnowWeather and diffadapter demo ,you can learn more.

同时已用在日活百万级别的线上项目中

Introduce

框架思想

Feature

  1. 通过控制反转实现module间服务提供、Activity跳转,Activity支持参数自动处理传递的参数,不需要繁琐的注解标注
  2. 多接口支持。优点在于不必要暴露所有接口,只需将需要的接口暴露,比如一个服务可能支持多个功能,但是有些功能只需要再module内使用,有些需要提供给其他module,这样就可以抽离出多个接口,只需要将需要暴露的放到基础module里。
  3. 支持多进程Activity跳转的参数自动处理
  4. 接口化的通信方式类似于“SDK”+数据结构,面向接口编程,更清晰直观, 对IDE更友好(可在IDE中直接跳转),协议变化直接反映在编译上,维护接口也简单
  5. 不需要繁琐的判空处理,服务的实现类或者路径的Activity不存在时不会崩溃。Activity跳转失败可以通过方法返回值来感知,做一些异常处理
  6. Less is more, simple is better!使用简单,功能强大

Using

简单的使用方式,坚持 Less is more, simple is better! 的理念,接口定义、调用的方式都很是常规的方式,尽可能的减少注解来标注,使配置最小化。

服务提供

向其他module提供的接口(在common module里定义)

public interface IFunctionOuter extends IHub{
    void testOut();
}

不需要暴露的接口(A module里定义)

public interface IFunctionInner extends IHub{
    void testInner();
}

实现功能( A module里实现)

@HubInject(api = {IFunctionInner.class, IFunctionOuter})
class FunctionImpl implements IFunctionInner , IFunctionOuter{
    @Override
    public void testInner(){
    ...
    }

    @Override
    public void testOut(){
    ...
    }
}

不需要判空、强转,直接调用(任何module里都可以调用)

Hub.getImpl(IFunctionOuter.class). testOut();

Activity跳转

在Application里初始化,这里只是传入Application引用做缓存,主要是为了后面跳转Activity时减少传入Context的过程,只是一个赋值操作,没有做任何耗时的操作,如果不需要Activity跳转,只需要服务提供,这个初始化就不要添加

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Hub.init(this);
    }
}

如果需要判断是否存在相应的页面来做一些提示之类的,可以将函数返回值的类型设置为boolean

public interface IActivityTest extends IHubActivity{
    boolean anyMethodName(List<Map<String,Integer>> a, int b); 
    void activity2(); // no need use at present
}

在需要调转的Activity上加上HubActivity注解,通过methodName也指定当前Activity对应的接口的方法,如果需要传参数,参数名和类型和接口里的保持一致,不需要注解,跳转完成后,Activity的参数会自动被解析(支持跨进程的Activity)

@HubActivity(activityApi = IActivityTest.class,methodName = "anyMethodName")
public class SecondActivity extends AppCompatActivity {
    List<Map<String,Integer>> a; // 参数名和类型保持一致
    int b; // 参数名和类型保持一致
    ...
}

调用

boolean found = Hub.getActivity(IActivityTest.class).activitySecond(mapList,9);

如果需要activityResult 

Hub.getActivityWithExpand(IActivityTest.class).withResult(MainActivity.this,10).build().activitySecond(mapList,9);

Import- Stable release(2.8.2)

Step1.Add it in your root add abuild.gradle at the end of repositories:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Step2. Add the dependency:

dependencies {
    implementation 'com.github.silencedut.hub:hub:latestVersion'
    annotationProcessor 'com.github.silencedut.hub:hub-compiler:latestVersion'
}

ProGuard

-keep class * implements com.silencedut.hub_annotation.IFindImplClz {*;}
-keep class * implements com.silencedut.hub_annotation.IFindActivity {*;}


-keepnames interface * extends com.silencedut.hub.IHub
-keepnames interface * extends com.silencedut.hub.IHubActivity
-keep interface * extends com.silencedut.hub.IHubActivity {<methods>;}

-dontwarn com.alibaba.fastjson.**
-keepattributes Signature
-keepattributes *Annotation*

License

Copyright 2017-2018 SilenceDut

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.

Extension points exported contracts — how you extend this code

IHub (Interface)
Created by SilenceDut on 2018/1/3 . [5 implementers]
hub/src/main/java/com/silencedut/hub/IHub.java
ITestApi (Interface)
Created by SilenceDut on 2018/1/3 . [3 implementers]
app/src/main/java/com/silencedut/hubdemo/ITestApi.java
IFindImplClz (Interface)
Created by SilenceDut on 2018/1/15 .
hub-annotation/src/main/java/com/silencedut/hub_annotation/IFindImplClz.java
ErrorUseHandler (Interface)
@author SilenceDut @date 2019/4/24 [3 implementers]
hub/src/main/java/com/silencedut/hub/utils/ErrorUseHandler.java
ITestApi1 (Interface)
Created by SilenceDut on 2018/1/3 . [3 implementers]
app/src/main/java/com/silencedut/hubdemo/ITestApi1.java
IFindActivity (Interface)
@author SilenceDut @date 2018/8/8
hub-annotation/src/main/java/com/silencedut/hub_annotation/IFindActivity.java
IHubLog (Interface)
@author SilenceDut @date 2019/3/26 [2 implementers]
hub/src/main/java/com/silencedut/hub/provider/IHubLog.java
IMultiApi (Interface)
Created by SilenceDut on 2018/3/22 . [2 implementers]
app/src/main/java/com/silencedut/hubdemo/IMultiApi.java

Core symbols most depended-on inside this repo

info
called by 15
hub/src/main/java/com/silencedut/hub/provider/IHubLog.java
build
called by 11
hub/src/main/java/com/silencedut/hub/navigation/activity/Expand.java
getIHubLog
called by 9
hub/src/main/java/com/silencedut/hub/provider/HubConfig.java
getImpl
called by 6
hub/src/main/java/com/silencedut/hub/Hub.java
onCreate
called by 4
hub/src/main/java/com/silencedut/hub/IHub.java
errorUseHub
called by 3
hub/src/main/java/com/silencedut/hub/utils/ErrorUseHandler.java
error
called by 3
hub/src/main/java/com/silencedut/hub/provider/IHubLog.java
exceptionHandler
called by 3
hub/src/main/java/com/silencedut/hub/navigation/impl/ImplHub.java

Shape

Method 97
Class 27
Interface 12
Enum 1

Languages

Java100%

Modules by API surface

hub/src/main/java/com/silencedut/hub/navigation/impl/ImplHub.java13 symbols
hub/src/main/java/com/silencedut/hub/Hub.java9 symbols
hub/src/main/java/com/silencedut/hub/provider/HubConfig.java8 symbols
hub/src/main/java/com/silencedut/hub/navigation/activity/ActivityHub.java7 symbols
app/src/main/java/com/silencedut/hubdemo/MainActivity.java6 symbols
hub/src/main/java/com/silencedut/hub/navigation/activity/ActivityHandler.java5 symbols
hub-compiler/src/main/java/com/silencedut/hub_compiler/InjectProcessor.java5 symbols
hub-compiler/src/main/java/com/silencedut/hub_compiler/HubActivityProcessor.java5 symbols
hub-compiler/src/main/java/com/silencedut/hub_compiler/BaseHubProcessor.java5 symbols
hub/src/main/java/com/silencedut/hub/navigation/activity/Expand.java4 symbols
hub-compiler/src/main/java/com/silencedut/hub_compiler/HubImplProcessor.java4 symbols
hub-annotation/src/main/java/com/silencedut/hub_annotation/IFindActivity.java4 symbols

For agents

$ claude mcp add Hub \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact