使用ARouter实现宿主Module与引用库Library之间的页面跳转

1.场景

今天学习了 Android组件化搭建,从这篇文章了解到新概念ARouter,瞬间被它的强大功能所吸引,其中最吸引我的是实现不同的module之间的页面跳转这个功能,因为它为Android组件化,模块化开发提供了快速实现的可能。于是,想自己试试好不好用。

2.准备

1.新建一个普通的工程

2.新建一个Android Library,并将其作为库文件引入刚建立的工程。

3.配置ARouter

1.添加依赖和配置

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

dependencies {
    // 替换成最新版本, 需要注意的是api
    // 要与compiler匹配使用,均使用最新版可以保证兼容
    compile 'com.alibaba:arouter-api:x.x.x'
    annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
    ...
}

具体版本可参考 https://github.com/alibaba/ARouter

添加配置和依赖后的完整build.gradle文件为:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.xzy.moduledevdemo"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [moduleName: project.getName()]
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    compile 'com.alibaba:arouter-api:1.1.1'
    annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
    implementation project(':mylibrary')
}


2.初始化ARouter

需要在Application类中初始化,初始化代码为:

package com.xzy.moduledevdemo;

import android.app.Application;

import com.alibaba.android.arouter.launcher.ARouter;

/**
 * Function:
 * Created by xuzhuyun on 2018/1/8.
 */

public class MyApp extends Application {
    private static MyApp sMyApp = null;
    public static boolean isDebug = true;

    @Override
    public void onCreate() {
        super.onCreate();
        sMyApp = this;
        if (isDebug) {
            ARouter.openLog();//开启日志
            ARouter.openDebug();//开启debug模式
        }
        ARouter.init(sMyApp);//初始化
    }
}

3.添加注解

在需要跳转的页面添加如下注解
package com.xzy.mylibrary;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.alibaba.android.arouter.facade.annotation.Route;

@Route(path = "/test/outerActivity")
public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
    }
}
那么,从宿主项目跳转到mylibrary中的TestActivity页面的写法如下:

package com.xzy.moduledevdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import com.alibaba.android.arouter.launcher.ARouter;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn_test).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //项目内跳转
//                ARouter.getInstance()
//                        .build("/test/innerActivity")
//                        .navigation();
                //跳转到其他module
                ARouter.getInstance()
                        .build("/test/outerActivity")
                        .navigation();
            }
        });
    }
}
注意:被注解的页面所在的项目中,也需要引入ARouter的依赖和配置,否则无法识别注解。


其他一些类似传参,注解路径必须至少需要两级以及其他一些高级用法,非本文重点,因为文档太多了,具体可参考

3.参考文章






猜你喜欢

转载自blog.csdn.net/jdfkldjlkjdl/article/details/79004862