- 利用APT实现的一个轻量级路由框架,注意本库基于Java1.8,所以需要配置compileOptions
- 配合AndroidStudio插件使用更方便(androidx分支下,使用插件需要从1.2.1.3版本开始)
- 自动生成跳转代码
- 自动生成设置数据的set方法,支持8中基本数据类型外加String,Serializable,Parcelable,并且支持大型数据的跳转
- 自动注入数据,自动释放数据
- 一键生成路由表,路由过期提醒
- 自定义路由表生成路径
-
创建一个用于管理路由的库(routers)
-
根目录下的build.gradle文件中添加classpath,并且在routers库的build.gradle文件中添加插件
classpath "com.mrcd:xrouter-gradle-plugin:1.2.1.1" apply plugin: 'com.mrcd.xrouter.engine'
-
在app目录下的build.gradle文件中添加自动绑定数据的插件,如下所示
apply plugin: 'com.android.application' apply plugin: "com.mrcd.xrouter.auto"
如果不想使用插件,开发者也可以在activity中手动调用绑定数据和释放数据的方法,如下所示
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { IntentWrapper.bindData(this); super.onCreate(savedInstanceState); } @Override protected void onDestroy() { super.onDestroy(); IntentWrapper.release(this); }
-
在routers库的build.gradle文件中添加依赖
api "com.mrcd:xrouter-api:${API_VERSION_NAME}"
-
将在需要使用路由功能的库中添加routers库的依赖,如果需要注解可另外添加依赖
implementation "com.mrcd:xrouter-annotation:${ANNOTATION_VERSION_NAME}" annotationProcessor "com.mrcd:xrouter-compiler:${COMPILER_VERSION_NAME}"
注意,在添加了annotationProcessor注解处理后,请务必在build.gradle文件中的defaultConfig节点下添加如下配置
javaCompileOptions { annotationProcessorOptions { arguments = [MODULE_PATH: project.projectDir.absolutePath] } }
如果有乱码问题,请在android节点下添加如下配置
compileOptions { encoding = "UTF-8" sourceCompatibility = '1.8' targetCompatibility = '1.8' }
-
运行gradlew :routers:make-Debug-routers或者在AS右侧gradle任务导航栏中找到对应的task双击运行即可
-
task运行完成后,在routers目录下会多出com.mrcd.xrouter.routers目录,在目录下即都是生成的路由表
-
如果不做配置,插件会自动生成两个task,分别对应make-Debug-routers和make-Release-routers, 开发者可通过XRouterConfig配置,目前config支持属性有:excludeProject,buildTypes,routerPath,appModule, 在一个工程有多个application项目时,可以通过appModule强制指定router库对应的app工程,详情可查看源码
- 对应Bean为:com.mrcd.xrouter.gradle.plugin.configs.DevelopConfig
- excludeProject:排除某些library,XRouter不会扫描对应目录下缓存的路由JSon,也不会生成对应的Router类
- buildTypes:构建类型,默认情况下为Debug与Release,若自定义了BuildType或者productFlavors,且有代码差异,需构建对应type的task,且此处的buildTypes,首字母需大写, 如:build.gradle中自定义了dev的productFlavors,那么buildType中需要增加DevDebug,DevRelease, 这样在对应routers库的gradle任务中就会看到make-DevDebug-routers,和make-DevRelease-routers
- routerPath:路由表的输出路径,即所有生成的XXXActivityRouter类的输出路径
- supportAndroidX:自1.2.1.1版本开始已废弃,是否支持AndroidX,若项目中已经使用AndroidX,则设置为true,此处只影响fragment中activity的启动
- appModule:根目录下application工程的工程名,如果根目录下只有一个application可以忽略,XRouter会自动扫描, 如果有多个application,可以强制指定对应的application工程名,配合excludeProject使用,生成对应application的路由
- customRouterLauncher:自定义的路由启动类的类名,即“XRouter”,默认情况下会生成com.mrcd.xrouter.XRouter类用于统一调用所有的Router类,
如果开发者需要自定义类名,或用于区分项目中已有的类名等,可以在此处配置,如“AppRouter”,那么调用方法如下:
AppRouter.getInstance().mainActivity().launch(context);
- XRouter在处理Activity继承情况下,要求父类的数据访问权限设置为public,否则无法绑定父类的数据 所以建议在声明数据变量时都设置为public,以避免不必要的异常情况
- XRouter在编译期会将所有处理过的路由信息按照一定格式输出,开发者可以自行查看
- 自1.2.1.1版本开始,AndroidX版本的支持将通过artifactId后缀加上“-x”来做支持,如:
implementation "com.mrcd:xrouter-gradle-plugin-x:1.2.1.1"
- 如果需要模块化单独运行某个工程中的module,该module下一定要配置applicationId, XRouter的auto插件内部会自动读取项目的defaultConfig.applicationId,否则将会报错
- 如下配置
-keep class com.mrcd.xrouter.annotation.** { *; } -keepclasseswithmembernames class * { @com.mrcd.xrouter.annotation.XParam <fields>; } -keepclasseswithmembernames class * { @com.mrcd.xrouter.annotation.Parcelable <fields>; } -keepclasseswithmembernames class * { @com.mrcd.xrouter.annotation.Serializable <fields>; } -keep class **$$DataBinder { *; }