美文网首页Android开发经验谈Android技术知识Android开发
阿里巴巴模块化 ARouter使用以及坑点

阿里巴巴模块化 ARouter使用以及坑点

作者: Android架构师丨小熊 | 来源:发表于2019-08-21 11:38 被阅读43次

一、使用

1.1 导包
导包现在分java和kotlin, java的导包方法如下,在根moduel的build.gradle添加如下内容:

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'
    ...

如果java使用的是apt,导入方法则是如下:

apply plugin: 'com.neenbedankt.android-apt'

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

apt {
    arguments {
        moduleName project.getName();
    }
}

dependencies {
    //这里填写最新的版本看文章开始
    compile 'com.alibaba:arouter-api:x.x.x'
    apt 'com.alibaba:arouter-compiler:x.x.x'
    ...

kotlin的导包方法如下,在根moduel的build.gradle添加如下内容:

apply plugin: 'kotlin-kapt'

kapt {
    arguments {
        arg("moduleName", project.getName())
    }
}

dependencies {
    //这里填写最新的版本,看文章开始
    compile 'com.alibaba:arouter-api:x.x.x'
    kapt 'com.alibaba:arouter-compiler:x.x.x'
    ...

1.2初始化

class App : Application() {
    val isDebugArout: Boolean = true
    override fun onCreate() {
        super.onCreate()

        sContext = this
        //如果在debug模式下
        if (isDebugArout){
            // 打印日志,默认关闭
            ARouter.openLog()
            // 开启调试模式,默认关闭(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
            ARouter.openDebug()
        }
        //初始化
        ARouter.init(this)
    }
//声明context
    companion object {
        lateinit var sContext: Context
    }

1.3普通Activity跳转

举例来说 AActivity跳转BActivity
AActivity

class AActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.app_activity_main)
        
        val textView = findViewById(R.id.app_but) as TextView
    
        textView!!.setOnClickListener {
            ARouter.getInstance()
                    .build("/path/CmMainActivity")
                    .navigation(this)
        }
    }

}

BActivity

@Route(path = "/path/CmMainActivity")
class CmMainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.ch_activity_main)


    }

1.4 普通Activity带值跳转

AActivity
调用with对应的类型即可,

class AActivity : AppCompatActivity() {

    //    var textView: TextView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val textView = findViewById(R.id.app_but) as TextView

      textView!!.setOnClickListener {
            ARouter.getInstance().build("/path/CmMainActivity")
                    .withLong("longkey", 555555)
                    .withString("stringKey", "55555")
                    .navigation(this)
        }
    }

BActivity

在接收的activity解析的时候,获取到extras,get对应的类型即可


@Route(path = "/path/CmMainActivity")
class CmMainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.ch_activity_main)
        
        val exte =intent.extras
        println(exte.getLong("longkey"))
        println(exte.getString("stringKey"))


    }
}

二、出现的错误

2.1
问题
There’s no route matchedPath =V/app/NetmainactivityGroup=app)
解决
1.build,gradle依赖是否添加成功
2.application 中是否初始化
3.跳转的类名字是否相同

2.2
问题
运行apk的时候同时出现了两个APK并且删掉一个另一个也消失掉
解决
去mainifests中查找是否其他模块中的也存在,存在的话删掉.

最后

漫漫开发之路,我们只是其中的一小部分……只有不断的学习、进阶,才是我们的出路!才跟得上时代的进步!

今年年初我花一个月的时间收录整理了一套知识体系,如果有想法深入的系统化的去学习的,资料免费领取方式:加群:797404811,我会把我收录整理的资料都送给大家,帮助大家更快的进阶。

重要的事说三遍,转发+转发+转发,让更多需要的朋友们都可以看到并且领到!

相关文章

网友评论

    本文标题:阿里巴巴模块化 ARouter使用以及坑点

    本文链接:https://www.haomeiwen.com/subject/ccdbsctx.html