去年看了積木的Android組件化方案,也按照他的方案寫了demo,但是始終理解不透,最近有時間,又使用ARouter重新做了一個組件化demo,這篇文章主要記錄在做組件化demo時遇到的問題,demo鏈接在文章最后
首先我參考了下面組件化的鏈接,做了一個基礎的demo,能夠實現組件的獨立運行,集成運行,以及通過ARouter進行跳轉和傳遞參數
組件化參考鏈接:https://blog.csdn.net/u010302765/article/details/101015212
ARouter使用詳解:https://blog.csdn.net/feather_wch/article/details/81605300
1:baselibrary
有了這個基礎demo之后,我開始根據自己的想法進行改進,首先我創建了一個基礎的library,用來放一些公共的依賴,工具類,以及BaseActivity等,以后會在基礎模塊中加入mvp的基類,方便每個moudle都做成mvp架構,這里需要注意的是:每個moudle都需要添加基礎模塊作為依賴,無論這個moudle是獨立運行還是集成運行.
2:baselibrary的依賴問題
基礎組件中的依賴jar包,不能使用implementation,要使用api,比如Gson: api 'com.google.code.gson:gson:2.8.2'
3:butterknife的使用
在使用butterknife時,我直接在baselibrary中添加了butterknife的依賴,然后在主APP中使用沒問題,但是到了作為library運行的功能moudle中,就報了很多人遇到的錯,具體的報錯及解決方案如鏈接所示:http://www.lxweimin.com/p/a7c94907baaf,這里需要注意的一點,也是我浪費了很多時間的一點,就是某個moudle單獨運行時,butterknife找控件需要用R,作為library運行時,則需要用R2,因此一定要在moudle的build.gradle中加入以下代碼,否則moudle單獨運行時不能識別R2,我就是卡在了單獨運行時不能識別R2這里
annotationProcessor "com.jakewharton:butterknife-compiler:$butterknife_version"
在library中做點擊事件時,不能使用swich-case,而要使用if else,butterknife綁定控件時用的是R2,但是點擊事件這里要用R
@Override
public void onClick(View v)
{
if (v.getId() == R.id.tv_close)
{
finishForresult();
}
}
4:主APP和各個moudle之間的通訊
經測試,在集成運行時,可以采用RxBus來傳遞消息,RxBus是從RxJava中衍生出來的,功能類似于EventBus
5:統一管理Module版本號
參考鏈接:https://blog.csdn.net/gao_chun/article/details/58105089
6:多個Module的Application共存問題
參考鏈接:http://www.lxweimin.com/p/5ccc545596d4
7:運行后手機上出現多個icon
注意點:所有可能成為library的組件,都要改集成運行時的清單文件,否則還是會出問題
參考鏈接:https://blog.csdn.net/u010899138/article/details/53516400
8:如何所有組件都可以使用全局上下文,參考鏈接中的3.3
參考鏈接: https://www.cnblogs.com/ldq2016/p/9073105.html
9:組件生命周期問題,可以結合6中的反射方法,在主APP中進行動態設置
參考鏈接: http://www.lxweimin.com/p/aa17cf4b2dca
10:ARouter如何自動生成路由地址表,這個問題暫時還沒有答案.
最后附上demo下載地址:
https://github.com/gongchenghao/zujianhuademo2.git
贈人玫瑰,手留余香,多謝點贊和star