您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Android開發(fā)之項(xiàng)目模塊化的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Android開發(fā)之項(xiàng)目模塊化的示例分析”這篇文章吧。
項(xiàng)目協(xié)同
項(xiàng)目協(xié)同,也叫多項(xiàng)目協(xié)同,是對(duì)多個(gè)相關(guān)且有并行情況項(xiàng)目的管理模式,它是幫助實(shí)現(xiàn)項(xiàng)目與企業(yè)戰(zhàn)略相結(jié)合的有效理論和工具[1]。本文的項(xiàng)目協(xié)同為Android主APP與其他業(yè)務(wù)模塊的協(xié)同。
假設(shè)我們的APP目錄如下,一個(gè)主app,多個(gè)modules。并假設(shè)我們的主app與各modules為多git repository。一個(gè)大APP多git repository管理是合理的。本文使用git repo[2]管理項(xiàng)目(可能有團(tuán)隊(duì)使用git submodule[3],在此不推薦,其坑會(huì)很多)。
MApp --獨(dú)立git rep app modules module1 --獨(dú)立git rep module2 --獨(dú)立git rep module3 --獨(dú)立git rep ...
使用git repo,團(tuán)隊(duì)早期可以不用玩一整套(git repo+gerrit),可以考慮只用repo去管理項(xiàng)目目錄,成員提交代碼還是繼續(xù)走git提交。
項(xiàng)目開發(fā)與調(diào)試
Android模塊化的主要目的是業(yè)務(wù)并行開發(fā),減少編譯時(shí)間,但又方便業(yè)務(wù)模塊與主App的調(diào)試。本文介紹如下方案。
MApp app --application modules module1 demo --application lib --library settings.gradle settings.gradle settings_debug.gradle local.properties
MApp的settings.gradle文件:
boolean moduleDebug() { boolean ret = false try { Properties properties = new Properties() File file = file('local.properties') if (!file.exists()) { return false } properties.load(file.newDataInputStream()) String debugStr = properties.getProperty("debug") if (debugStr != null && debugStr.length() > 0) { ret = debugStr.toBoolean() } } catch (Throwable throwable) { throwable.printStackTrace() ret = false } return ret } include ':app' if (moduleDebug()) { apply from: 'settings_debug.gradle' }
settings_debug.gradle文件:
//include 'module1' //project(':module1').projectDir = new File('modules/module1/lib') ...其他業(yè)務(wù)模塊
當(dāng)module1在需求開發(fā)階段,完全不用考慮主APP,可以在Android Studio中以項(xiàng)目的方式打開。當(dāng)module1需要和主APP跑流程時(shí),我們只需要把MApp的local.properties的debug屬性改為true,并在settings_debug.gradle中打開module1即可。
業(yè)務(wù)模塊服務(wù)調(diào)用與通知
當(dāng)APP模塊化后,通過Intent(Context packageContext, Class<?> cls)
方式去啟動(dòng)其他模塊的Activity就不太合理了。模塊化后,模塊里的Activity或其他組件對(duì)其他業(yè)務(wù)模塊最好透明。喚起Activity可以通過App Links[4]的方式,也就是我們常說的url router方式。App Links還可以玩deep link。Github上現(xiàn)在開源項(xiàng)目比如ARouter[5]就是App Link的應(yīng)用。
當(dāng)然,模塊之間的通信,不局限于啟動(dòng)四大組件,還有服務(wù)調(diào)用與通知。這的服務(wù)不是Android系統(tǒng)的Service。舉個(gè)服務(wù)通知的例子,在電商APP中,店鋪詳情頁(yè)點(diǎn)收藏按鈕,可能要通知其他模塊,變更UI或數(shù)據(jù)。服務(wù)調(diào)用的例子,比如模塊喚起登陸注冊(cè),登陸或注冊(cè)成功后,做相應(yīng)業(yè)務(wù)處理。
服務(wù)調(diào)用,大部分團(tuán)隊(duì)可能沒涉及到。服務(wù)調(diào)用可以用IOC,反射等注冊(cè)到服務(wù)注冊(cè)中心。本文選一個(gè)取巧的方案。利用Applicatin.getSystemService方法,讓Application作為ZoomKeep一樣成為服務(wù)注冊(cè)中心。只要各Serivce繼承同一個(gè)Interface,相應(yīng)模塊間服務(wù)調(diào)用就不難了。
public class MApp extends Application { @Override public Object getSystemService(String name) { return super.getSystemService(name); } }
服務(wù)通知,稍簡(jiǎn)單,用廣播,EventBus[6]或其他方式都可。本文推薦EventBus,但其有缺點(diǎn),如Event多起來后,很難找全觀察者和通知者之間的關(guān)系;一些簡(jiǎn)單Event對(duì)象無法復(fù)用,所以最好二次開發(fā)。
以上是“Android開發(fā)之項(xiàng)目模塊化的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。