在偏外包的公司做APK開發(fā),很多時(shí)候,一個(gè)版本的代碼復(fù)制來復(fù)制去,資源文件等復(fù)制過程中會(huì)很混亂。所以就提出,能不能模塊化,通過module的方式進(jìn)行模塊化開發(fā)。
使用module的原因,代碼可修改性強(qiáng),又可以根據(jù)需求,進(jìn)行模塊集成。
module模塊化開發(fā)很簡(jiǎn)單,前提是擁有扎實(shí)的Android開發(fā)技術(shù)。
首先,提出兩個(gè)概念。以菜單為模型,進(jìn)行說明。我們把一個(gè)菜單分成諾干個(gè)1級(jí)菜單,那么這諾干個(gè)1級(jí)菜單就是同級(jí)別的邏輯,這些1級(jí)菜單,我習(xí)慣叫橫向邏輯,或者并行邏輯。如果這個(gè)菜單,1級(jí)-->2級(jí)-->3級(jí),我習(xí)慣稱之為縱向,或者串行邏輯。
由此,根據(jù)這一概念,對(duì)業(yè)務(wù)邏輯進(jìn)行劃分。Android除基礎(chǔ)主界面外,其他界面,基本都是由一個(gè)按鈕或其他控件,進(jìn)行點(diǎn)擊,逐層進(jìn)入,也就是上述的縱向邏輯。由此可見,可以把自己的app分成很多的縱向邏輯,那么,每一個(gè)縱向邏輯都可以做成一個(gè)單獨(dú)的module。
以上就把APP的業(yè)務(wù)進(jìn)行了分割,并模塊化。執(zhí)行代碼的時(shí)候,用APP引用眾多module就可以實(shí)現(xiàn)集成。module的模式與集成相似。可以把module看成一個(gè)父類,而引用他的module看成子類。顧,數(shù)據(jù)傳遞時(shí),要注意關(guān)系,父類是無法使用子類方法的。如需要,可以嘗試provide,或者AIDL,或者receiver。
模塊開發(fā)中遇到的情況:
BaseModule父類的重要性。Android stdio中,如果掌握不好jar包,會(huì)造成jar重復(fù)的錯(cuò)誤。(這里有個(gè)問題,樓主也沒有想明白。但實(shí)踐了。多個(gè)module同時(shí)引用同一個(gè)jar包,會(huì)有jar沖突的錯(cuò)誤。但是多個(gè)module同時(shí)引用lib缺不會(huì)有問題。)如果多個(gè)module都需要引用同一JAR,可以把jar包放在BaseModule中,使其他module引用BaseModule來實(shí)現(xiàn)調(diào)用jar。
module引用方向
module的引用,基本上可以隨便引用,唯一不可能循環(huán)引用,例:A-->B,B-->A,此時(shí)就會(huì)報(bào)錯(cuò)。所以,分割module時(shí),注意業(yè)務(wù)不能循環(huán)。而對(duì)于代碼而言,無論是intent的傳值跳轉(zhuǎn),還是onResult都是可以使用的,并不會(huì)因?yàn)槟K化影響這些語法。
弊端,因?yàn)槊總€(gè)module都會(huì)有一個(gè)gradle,所以Android studio跑起來很慢,可以升級(jí)gradle和studio版本,爭(zhēng)取快一點(diǎn)。另一點(diǎn),做版本控制的時(shí)候,一定要注意忽略事件。樓主有一次就忘記了,整整3G的文件,git都不讓傳。。。。OOM了!
附加忽略文章:http://www.itdecent.cn/p/c5bd723c2b3c