TheRouter是貨拉拉開源的路由框架摄狱,針對Android平臺實現(xiàn)組件化绕辖、跨模塊調(diào)用摇肌、動態(tài)化等功能的集成框架,基本上算當(dāng)前最先進(jìn)的路由庫了仪际。
Github: https://github.com/HuolalaTech/hll-wp-therouter-android/
官網(wǎng):http://therouter.cn/
查看最新版本
TheRouter的版本分為兩種围小,穩(wěn)定版和rc版,一般不追求新功能我們就用穩(wěn)定版就行树碱,可以在官網(wǎng)看到最新的版本號和各種版本的說明:https://therouter.cn/docs/2022/09/06/01
接入
新建一個Demo工程肯适,打開Demo的根目錄build.gradle
。
-
新版本接入classpath
如果是新版本的Gradle成榜,classpath
已經(jīng)改為用plugins
的方式引入框舔,只需要在閉包內(nèi)加這一句就行了
id 'cn.therouter' version '1.1.1' apply false
-
老版本接入classpath
對于老版本的Gradle,需要手動引入classpath
,在TheRouter官方Github首頁也有接入介紹
classpath "cn.therouter:plugin:1.1.1"
-
引入插件
找到項目里全部的app模塊(一般只會有一個刘绣,特殊項目會有多個)樱溉。也就是整個工程的所有build.gradle
文件里面,只要是有com.android.application
這個的模塊纬凤,都要加上如下代碼
// 老版本這樣寫
apply plugin: 'therouter'
// 新版本這樣寫
id 'therouter'
新版本的Gradle
(被注釋掉的那個就是kapt插件福贞,這里我是用了更先進(jìn)的ksp)
老版本的Gradle
-
引入kapt
TheRouter的注解處理依賴kapt執(zhí)行,所以要在項目里面手動引入移斩,否則無法處理注解
注:所有的模塊都必須引入kapt肚医,否則就有可能造成某些路由表不生成。我最開始以為簡單向瓷,就在最底層模塊依賴了kapt,結(jié)果上層模塊路由表都沒有生成舰涌,查了好久才發(fā)現(xiàn)猖任,所有模塊都要加。
如果報找不到kapt瓷耙,可能是因為沒有引入kotlin-kapt的插件朱躺,參考步驟3里面的截圖,接入對應(yīng)的kapt搁痛。如果是純Java工程长搀,需要用Java的APT處理,APT就不用引入插件了鸡典,直接把kapt
改成annotationProcessor
annotationProcessor "cn.therouter:apt:1.1.1"
使用
-
聲明路由
給需要跳轉(zhuǎn)的頁面加上路由表聲明
@Route(path = "http://therouter.com/home")
public class HomeActivity extends BaseActivity {
}
-
添加參數(shù)注入
這一步如果在base里面寫了的話就不用每個Activity都加了源请。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TheRouter.inject(this);
}
-
發(fā)起跳轉(zhuǎn)
也就是原來使用startActivity()的方法,都可以改成這樣使用了
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TheRouter.build("要跳轉(zhuǎn)的目標(biāo)頁Path")
.withInt("intValue", 12345678)
.withString("str_123_Value", "傳中文字符串")
.withBoolean("boolValue", true)
.withLong("longValue", 123456789012345L)
.withChar("charValue", 'c')
.withDouble("double", 3.14159265358972)
.withFloat("floatValue", 3.14159265358972F)
.navigation();
TheRouter.build("如果沒有參數(shù)彻况,可以什么都不傳").navigation();
}