一、使用
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