Board logo

标题: Android路由ARouter初步体验(1) [打印本页]

作者: look_w    时间: 2019-2-19 17:07     标题: Android路由ARouter初步体验(1)

前言

什么是ARouter?阿里巴巴官方解释是:Android平台中对页面、服务提供路由功能的中间件。那又是什么鬼,有啥功能,什么场合适合使用?官方给的说明是:
一、功能介绍

1、支持直接解析标准URL进行跳转,并自动注入参数到目标页面中
2、支持多模块工程使用
3、支持添加多个拦截器,自定义拦截顺序
4、支持依赖注入,可单独作为依赖注入框架使用
5、支持InstantRun
6、支持MultiDex(Google方案)
7、映射关系按组分类、多级管理,按需初始化
8、支持用户指定全局降级与局部降级策略
9、页面、拦截器、服务等组件均自动注册到框架
10、支持多种方式配置转场动画
11、支持获取Fragment
二、典型应用

1、从外部URL映射到内部页面,以及参数传递与解析
2、跨模块页面跳转,模块间解耦
3、拦截跳转过程,处理登陆、埋点等逻辑
4、跨模块API调用,通过控制反转来做组件解耦

好了,这些理论啥的我就不说了,具体也可以去官方地址查看:https://github.com/alibaba/ARouter
接下来我们来看看怎么使用,一步一步来
使用说明

1、在project gradle里面添加

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.3.0' //推荐是2.3以上
            classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //路由需要
        }
    }

2、在 app 和 module 的 gradel 添加依赖

    android {
        defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
            arguments = [ moduleName : project.getName() ]
             }
          }
        }
    }
     
    dependencies {
        // 替换成最新版本, 需要注意的是api
        // 要与compiler匹配使用,均使用最新版可以保证兼容
       compile 'com.alibaba:arouter-api:1.2.0'
       annotationProcessor 'com.alibaba:arouter-compiler:1.1.0'
        ...
    }

3、新建两个module(lib),然后让app都依赖这两个module

    dependencies {
       compile 'com.alibaba:arouter-api:1.2.0'
       annotationProcessor 'com.alibaba:arouter-compiler:1.1.0'
     
        //添加下面两个依赖
        compile project(':module1')
        compile project(':module2')
    }

4、在两个module里面都新建一个activity,目的是测试模块化跳转。实验证明,只要app依赖了这两个module,module之间不需再互相依赖就可以实现从module1跳转到module2 。

    //添加注解,path必须为 /XX/OO 的形式
    @Route(path = "/module1/main")
    public class Module1Activity extends AppCompatActivity {
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_module1);
     
            String data = getIntent().getStringExtra("data");
            Toast.makeText(this, "传递的参数:" + data, Toast.LENGTH_LONG).show();
        }
    }




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0