ARouter的集成
有3种不同的module,app模块,base模块,和功能模块(module_begin(主模块),module_home(首页模块))(发代码块搞了很久不会发。。。)
一、AndroidStudio环境和配置
Android Studio 3.1.3
Build #AI-173.4819257, built on June 5, 2018
JRE: 1.8.0_152-release-1024-b01 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.13.6
注意:包名不可以一样
二、配置过程()
第1步:在项目的gradle.properties里面配置isModule=false,作为开关,设置功能模块是以application的模式启动还是library的模式启动
WechatIMG137.jpegisModule=false
第2步:在项目的build.gradle的dependencies配置
WechatIMG138.jpeg
classpath'com.neenbedankt.gradle.plugins:android-apt:1.4'
第3步:新建1个Android Library类型的module作为基础库 baselibrary
第4步:新建2个Phone & Tablet Module类型的module 作为功能模块 module_begin(这里放一个MainActivity),module_home(这边放一个HomeActivity)(模块的命名不要改,一会要用到)
image接下来开始修改4个模块(app,baselibrary,module_begin,module_home)里面的配置
第5步:修改baselibrary模块
1、在build.gradle添加2个依赖和一个配置(跳转页面要用到)
android{
defaultConfig {
.....
javaCompileOptions { annotationProcessorOptions { arguments = [moduleName: project.getName()] }}
}
}
dependencies {
.....
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
api 'com.alibaba:arouter-api:1.3.1'
}
image
2、在模块内部新建一个BaseActivity作为基类,一个JumpUtil作为页面跳转的常量
BaseActivity类
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.alibaba.android.arouter.launcher.ARouter;
/**
* Activity的基类
* */
public class BaseActivity extends AppCompatActivity{
@Override
protected void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ARouter的初始化
ARouter.init(getApplication());
}
}
JumpUtil类
public class JumpUtil {
/**
* begin和home要跟module_XXX的一样
* */
public static final String MainActivity = "/begin/MainActivity";
public static final String HomeActivity = "/home/HomeActivity";
}
3、接下来修改功能模块(moduel_begin,module_home)(已module_begin为例)
(1)在模块里面的 src/main文件下创建buildApp(作为module)和buildModule(作为单独App,方便单元测试)文件夹
屏幕快照 2019-05-12 下午2.15.43.png
(2)把AndroidManifest复制到buildApp和buildModule文件夹里面,然后把外面的AndroidManifest文件删除
WechatIMG142.jpeg
(3)修改buildApp里面的AndroidManifest.xml,删除掉2个icon和1个label,Activity的启动,buildModule里面的不用修改,因为是作为独立模块运行
WechatIMG146.jpeg
WechatIMG147.jpeg
(4)修改功能模块的build.gradle
WechatIMG149.jpeg
WechatIMG151.jpeg
moduel_begin的build.gradle
if (isModule.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
if (isModule.toBoolean()) {
applicationId "com.tianniu.module_begin"
}
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName: project.getName()]
}
}
sourceSets {
main {
if (isModule.toBoolean()) {
manifest.srcFile 'src/main/buildModule/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/buildApp/AndroidManifest.xml'
}
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//noinspection GradleCompatible
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
implementation project(':baselibrary')
if (!isModule.toBoolean()) {
// implementation project(':module_home')
}
}
另一个模块module_home,步骤跟module_begin的一样(build.gradle有一点不一样,其它一样)
module_home的build.gradle
if (isModule.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
if (isModule.toBoolean()) {
applicationId "com.tianniu.moddule_home"
}
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName: project.getName()]
}
}
sourceSets {
main {
if (isModule.toBoolean()) {
manifest.srcFile 'src/main/buildModule/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/buildApp/AndroidManifest.xml'
}
}
}
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//noinspection GradleCompatible
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
implementation project(':baselibrary')
if (!isModule.toBoolean()) {
// 这里写你作为module时要添加的模块,因为begin模块需要home模块,而这里需要
}
}
4、接下来是app模块的修改
(1)配置app的build.gradle
WechatIMG154.jpeg
app的build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.tianniu.aroutertest"
minSdkVersion 19
targetSdkVersion 28
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'])
//noinspection GradleCompatible
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
implementation 'com.alibaba:arouter-api:1.3.1'
if (!isModule.toBoolean()) {
implementation project(':module_begin')
}
}
(2)删除掉所有Activity,创建一个Application,设置到AndroidManifest.xml里面的name里面,并在AndroidManifest.xml添加begin的MainActivity,设置启动
WechatIMG155.jpeg
MyApplication.java
import android.app.Application;
import com.alibaba.android.arouter.launcher.ARouter;
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
initRouter(this);
}
private void initRouter(MyApplication myApplication) {
if (BuildConfig.DEBUG) {
ARouter.openLog(); // 打印日志
ARouter.openDebug(); // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
}
ARouter.init(myApplication);
}
@Override
public void onTerminate() {
super.onTerminate();
ARouter.getInstance().destroy();
}
}
app的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tianniu.aroutertest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:name=".MyApplication"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="com.tianniu.module_begin.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
WechatIMG184.jpeg
配置就已经完成了。
(MainActivity可以用module_begin模块里面的默认Activity,HomeActivity可以在module_home模块里面新建一个activity,也可以里面的MianActivity直接改名)
将之前提到过的在工程目录下的gradle.properties的 isModule=false
false :一整个APP
true:可以已一个module单独运行(方便测试,不用每次都编译个1分钟2分钟的)
Activity跳转页面
MainActivity
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.alibaba.android.arouter.launcher.ARouter;
import com.tianniu.baselibrary.JumpUtil;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 跳转页面
* */
ARouter.getInstance()
.build(JumpUtil.HomeActivity) //页面的String值
// .withString("key",s) //附带参数
.navigation();
}
}
在另一个Activity可以这样接收参数(HomeActivity)
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.alibaba.android.arouter.facade.annotation.Autowired;
public class HomeActivity extends AppCompatActivity {
@Autowired(name = "key")
String text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
}
}
如果跳转失败会Toast出现,大多数是JumpUtil里面的String变量写错了
暂时只学到这里,有新的会更新。有什么错的地方和不足的地方,请