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' ... }
添加配置和依赖后的完整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的依赖和配置,否则无法识别注解。