接入

Gradle配置

  1. 在基础库中增加依赖(1.x为版本号)。

    1. repositories {
    2. jcenter()
    3. }
    4. dependencies {
    5. compile 'com.sankuai.waimai.router:router:1.x'
    6. }
  2. 在使用了注解的每个模块中配置注解生成器,包括Application和Library工程。

    1. repositories {
    2. jcenter()
    3. }
    4. dependencies {
    5. annotationProcessor 'com.sankuai.waimai.router:compiler:1.x'
    6. }
  3. 在Application工程中,配置Gradle插件。

    根目录的build.gradle

    1. buildscript {
    2. repositories {
    3. jcenter()
    4. }
    5. dependencies {
    6. classpath 'com.android.tools.build:gradle:2.3.3'
    7. // 添加WMRouter插件
    8. classpath "com.sankuai.waimai.router:plugin:1.x"
    9. }
    10. }

    Application模块中的build.gradle

    1. apply plugin: 'com.android.application'
    2. // 应用WMRouter插件
    3. apply plugin: 'WMRouter'
  4. Proguard配置。

    WMRouter已经内置的Proguard配置如下(详见源码router/proguard-rules.pro),使用AAR依赖时一般不需要重复配置。

    1. # 保留ServiceLoaderInit类,需要反射调用
    2. -keep class com.sankuai.waimai.router.generated.ServiceLoaderInit { *; }
    3. # 避免注解在shrink阶段就被移除,导致obfuscate阶段注解失效、实现类仍然被混淆
    4. -keep @interface com.sankuai.waimai.router.annotation.RouterService

    如果使用了@RouterService注解和ServiceLoader加载实例的功能,会反射调用构造方法,应根据实际情况配置Proguard,避免实现类中的构造方法被移除,示例如下。

    1. # 使用了RouterService注解的实现类,需要避免Proguard把构造方法、方法等成员移除(shrink)或混淆(obfuscate),导致无法反射调用。实现类的类名可以混淆。
    2. -keepclassmembers @com.sankuai.waimai.router.annotation.RouterService class * { *; }

初始化

Application.onCreate中初始化:

  1. // 创建RootHandler
  2. DefaultRootUriHandler rootHandler = new DefaultRootUriHandler(context);
  3. // 初始化
  4. Router.init(rootHandler);

Manifest与外部跳转配置

跳转的目标Activity不需要配置IntentFilter,也不需要配置exported。

  1. <activity name = ".AccountActivity" />

所有的外部URI跳转建议由一个中转Activity接收,再调用Router跳转到目标页面。由于跳转过程中可能会触发定位、登录等各种异步逻辑,因此中转Activity应该有界面,并监听在跳转结束后关闭Activity。

  1. <activity android:name=".UriProxyActivity" android:exported="true">
  2. <intent-filter>
  3. <!-- 接收所有scheme为demo的外部URI跳转,不区分host和path -->
  4. <data android:scheme="demo"/>
  5. </intent-filter>
  6. </activity>
  1. public class UriProxyActivity extends BaseActivity {
  2. @Override
  3. protected void onCreate(@Nullable Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. DefaultUriRequest.startFromProxyActivity(this, new OnCompleteListener() {
  6. @Override
  7. public void onSuccess(@NonNull UriRequest request) {
  8. finish();
  9. }
  10. @Override
  11. public void onError(@NonNull UriRequest request, int resultCode) {
  12. finish();
  13. }
  14. });
  15. }
  16. }

其他可选配置

请参考后文“高级配置”中的说明。