转载

MCRN-BRIDGE使用说明

"dependencies": {
  "@mc/mcrn-bridge": "x.x.x",
}
复制代码

2.执行npm install安装mcrn-bridge

Android端接入流程

1.在Setting.gradle中加入

include ':mcrn-bridge'
project(':mcrn-bridge').projectDir = new File(rootProject.projectDir, '../node_modules/@mc/mcrn-bridge/android')
复制代码

2.在项目根目录的build.gradle中的添加如下内容

allprojects {
    repositories {
        //正式版的maven地址
        maven { url 'http://mvn.sprucetec.com/nexus/content/repositories/releases/' }
        //SNAPSHOT 的maven地址
        maven { url 'http://mvn.sprucetec.com/nexus/content/repositories/snapshots/' }
           }
}
复制代码

3.在App build.gradle 中 做如下操作

3.1在defaultConfig中添加

annotationProcessorOptions {
                arguments = [moduleName: project.getName()]
            }
 android{
defaultConfig {
      javaCompileOptions {
            annotationProcessorOptions {
                arguments = [moduleName: project.getName()]
            }
        }
           }
}
复制代码

3.2 在dependencies中加入

api project(':mcrn-bridge')
api('com.meicai.android:router_api:1.0')
annotationProcessor('com.meicai.android:router_compiler:1.0')
复制代码

4.在APP的Application中添加如下内容

4.1在Application的Oncreate内添加

MCRouter.init(this);
MCRNBridge.init(getReactNativeHost());
复制代码

4.2在getPackage中添加 new MCRNReactPackage()

@Override
protected List<ReactPackage> getPackages() {
    return Arrays.<ReactPackage>asList(
            ...
            new MCRNReactPackage()
           ...
    );
}
复制代码

5.在APP的Mainfest.xml中添加

<activity
            android:name="com.meicai.mcrn_bridge.activity.MCReactActivity"
            android:screenOrientation="portrait" />
复制代码

到此,接入就完成了,开始使用吧。

使用说明

Android原生端使用说明

1.如果项目有基类BaseActivity,只需在BaseActivity中添加如下内容

1.1在BaseActivity类中添加

protected abstract String setRouterPath();
复制代码

1.2在BaseActivity的onCreate中添加

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String path = setRouterPath();
    AppManagerUtils.getInstance().addActivity(path, this);
}
复制代码

1.3 在BaseActivity的onDestroy中添加

@Override
protected void onDestroy() {
    super.onDestroy();
    AppManagerUtils.getInstance().finishActivity(this);
}
复制代码

1.4添加完成后所有继承BaseActivity的类都会重写setRouterPath()方法

@Override
protected String setRouterPath() {
    return "xxx";
}
复制代码

需要在该方法中返回当前页面的路径,方便将该Activity加入栈中,目的是方便RN端回退到特定路径的页面,比如当前打开页面为A-B-C-D

B端路径为"/home/b",则RN端可以根据跳转到"/home/b"这个路径,也就是回退到B页面,同时将C、D页面销毁。

2.如果Android端APP没有公共的BaseActivity,则需要在每个页面Oncreate 和onDestory中加入如下内容

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AppManagerUtils.getInstance().addActivity("xxx", this);
}
@Override
protected void onDestroy() {
    super.onDestroy();
    AppManagerUtils.getInstance().finishActivity(this);
}
复制代码

注意:上边的xxx是指该页面的路径,每个页面都有一个唯一的路径,用户需要手动填写,确保每个Activity的路径唯一。

3.Fragment 如何添加路径

3.1,可以通过new MCReactFragment得到fragment

MCReactFragment fragment = MCReactFragment.newInstance(this, mReactInstanceManager, "example", "/Example", "{}", Uuid.getInstance().getUid());
复制代码

3.2,可以继承MCReactFragment,并重写getMainComponentName()、getPath()、getQuery()、getViewId()方法

public class SecondFragment extends MCReactFragment {
    private String viewId;

    @Override
    public String getMainComponentName() {
        return "mcrn";
    }

    @Override
    public String getPath() {
        return "/home/main";
    }

    @Override
    public String getQuery() {
        return "{}";
    }

    @Override
    public String getViewId() {
        if (TextUtils.isEmpty(viewId)) {
            viewId = Uuid.getInstance().getUid();
        }
        return viewId;
    }
}
复制代码

4.Android端如何通过Activity路径打开Activity

4.1在需要跳转的Activity顶部添加@Route("/xxx/xxx")

注意:xxx是指该页面路径。注意,路径需要设置两级以上,并且以/开头

@Route(path = "/home/first")
public class FirstActivity extends BaseActivity {
    ...
}
复制代码

4.2Android 端可以通过该路径打开该页面

MCRouter.getsInstance().build("/home/first").navigation();
复制代码
原文  https://juejin.im/post/5d1462c3f265da1b6836ce16
正文到此结束
Loading...