ARouter实现功能组件之间的Activity跳转

先看下效果:

本文Android studio版本:Android Studio Dolphin | 2021.3.1

在app module里面导入arouter

  • app module下面的build.gradle文件里添加配置

android {
	...

    defaultConfig {
	...

        //ARouter添加
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }
	...
}


dependencies {

	...

    // 替换成最新版本, 需要注意的是api
    // 要与compiler匹配使用,均使用最新版可以保证兼容
    implementation 'com.alibaba:arouter-api:1.5.2'
    annotationProcessor 'com.alibaba:arouter-compiler:1.5.2'

}

ARouter的初始化

  • 新建MyApplication,如下:
import android.app.Application;

import com.alibaba.android.arouter.launcher.ARouter;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 这两行必须写在init之前,否则这些配置在init过程中将无效
        ARouter.openLog();     // 打印日志
        ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)

        ARouter.init(this); // 尽可能早,推荐在Application中初始化
    }
}
  • 别忘了放到AndroidManifest.xml文件的标签中:
        android:name=".MyApplication"
  • 给MainActivity添加路径,布局代码自己写哈!
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;

import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;

@Route(path = "/app/main_act")
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void toLogin(View view) {
        ARouter.getInstance().build("/login/login_act").navigation();
    }
}

新建library类型的module:login

  • 如下图:

  • 导入Arouter库,和app module一样:


android {
	...

    defaultConfig {
	...

        //ARouter添加
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }
	...
}


dependencies {

	...

    // 替换成最新版本, 需要注意的是api
    // 要与compiler匹配使用,均使用最新版可以保证兼容
    implementation 'com.alibaba:arouter-api:1.5.2'
    annotationProcessor 'com.alibaba:arouter-compiler:1.5.2'

}
  • 然后新建LoginActivity,并添加路径,布局文件自己写哈!
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;

import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;

@Route(path = "/login/login_act")
public class LoginActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
    }

    public void toShare(View view) {
        ARouter.getInstance().build("/share/share_act").navigation();
    }
}

新建library类型的module:share

  • 也是新建module,然后添加ARouter依赖,同步一下。照上面弄就好。
  • 新建ShareActivity,并添加路径。布局里就一个TextView,显示“分享页”。
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.alibaba.android.arouter.facade.annotation.Route;

@Route(path = "/share/share_act")
public class ShareActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_share);
    }
}

app module 添加login和share 这两个依赖

build.gradle文件添加:

dependencies {
	...

    runtimeOnly project(':login')
    runtimeOnly project(':share')
    
}

运行,解决报错。

第一个错误参考:https://stackoverflow.com/questions/55217992/manifest-merger-failed-attribute-applicationappcomponentfactory-androidx
报错如下:

Error:
	Attribute application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) from [androidx.core:core:1.7.0] AndroidManifest.xml:24:18-86
	is also present at [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 value=(android.support.v4.app.CoreComponentFactory).
	Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-28:19 to override.

解决办法是在根目录的gradle.properties文件中添加:

android.enableJetifier=true
android.useAndroidX=true

同步一下。再Run,成功了。

posted @ 2023-07-20 16:19  不喜不悲1116  阅读(117)  评论(0编辑  收藏  举报