阿里巴巴模塊化 ARouter使用以及坑點

一、使用

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中查找是否其他模塊中的也存在,存在的話刪掉
在這裏插入圖片描述


參考文檔
作者:SkyHand天天
原文:https://blog.csdn.net/niubitianping/article/details/77982033

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章