ARouter 是阿里巴巴开源的一款 Android 路由组件,可以用来控制 Android App 的界面跳转等。 本文基于 arouter-api 1.4.1, arouter-compiler 1.2.2 版本。
Gradle 配置 首选是选择要引入 ARouter 的模块,这边直接使用 app 模块,修改 build.gradle:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "li.glorin.arouterdemo" javaCompileOptions { annotationProcessorOptions { arguments = [AROUTER_MODULE_NAME: project.getName()] } } } } dependencies { implementation ('com.alibaba:arouter-api:1.4.1' ) { exclude group: 'com.android.support' } annotationProcessor 'com.alibaba:arouter-compiler:1.2.2' }
这边要注意,compiler 的版本和 api 的版本不一样 ,我们经常使用的如 ButterKnife 等,annotationProcessor 版本经常都是和 api 版本一致的,这是容易犯的一个想当然的小错误,可能笔者比较粗心,直接将compiler也设置成1.4.1,结果编译总是报错: Could not find com.alibaba:arouter-compiler: 1.4.1。
初始化 在 Application 的 onCreate 里面初始化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class App extends Application { @Override public void onCreate () { super .onCreate(); if (BuildConfig.DEBUG) { ARouter.openLog(); ARouter.openDebug(); } ARouter.init(this ); } }
这边注意,openLog 和 openDebug 都要在 init 之前 调用,才会生效。
简单使用 假设我们有两个 Activity:MainActivity 和 TestActivity。 在TestActivity中,使用注解配置路由路径:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @Route (path = "/test/activity" )public class TestActivity extends AppCompatActivity { private static final String TAG = "TestActivity" ; @Autowired (name = "date" ) String mDate; @Override protected void onCreate (@Nullable Bundle savedInstanceState) { super .onCreate(savedInstanceState); ARouter.getInstance().inject(this ); Log.d(TAG, "Date = " + mDate); } }
在 MainActivity 的点击事件中,使用 ARouter 跳转到 TestActivity:
1 2 3 4 5 6 7 8 9 public void onClick (View view) { switch (view.getId()) { case R.id.buttonTest: ARouter.getInstance().build("/test/activity" ) .withString("date" , "Today" ) .navigation(); break ; } }
如此即可完成简单的跳转。
简单参数传递 在上面的示例代码中,我们发现在 TestActivity 中,有一个由 Autowired 注解的 Field mData, 它的 name = "date"
,而在 MainActivity 启动 Test 的代码中,我们有一个 .withString("date", "Today")
的调用,简单猜测一下,也知道这个是用来传递参数的,至于具体的实现,后续再行分析。
ARouter的入门就先介绍到这,感谢各位看官阅读。水平有限,如有错漏,烦请不吝指教。