国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android開(kāi)發(fā)之項(xiàng)目模塊化實(shí)踐教程

2019-10-22 18:28:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

大家應(yīng)該都知道,項(xiàng)目模塊化是一個(gè)大命題,相信各團(tuán)隊(duì)都有其合理方案。本文不求涵蓋各方面,僅從項(xiàng)目協(xié)同、開(kāi)發(fā)調(diào)試、業(yè)務(wù)模塊服務(wù)調(diào)用與通知三個(gè)方面簡(jiǎn)述一個(gè)可行方案。下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

項(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)目開(kāi)發(fā)與調(diào)試

Android模塊化的主要目的是業(yè)務(wù)并行開(kāi)發(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在需求開(kāi)發(fā)階段,完全不用考慮主APP,可以在Android Studio中以項(xiàng)目的方式打開(kāi)。當(dāng)module1需要和主APP跑流程時(shí),我們只需要把MApp的local.properties的debug屬性改為true,并在settings_debug.gradle中打開(kāi)module1即可。

業(yè)務(wù)模塊服務(wù)調(diào)用與通知

當(dāng)APP模塊化后,通過(guò)Intent(Context packageContext, Class<?> cls)方式去啟動(dòng)其他模塊的Activity就不太合理了。模塊化后,模塊里的Activity或其他組件對(duì)其他業(yè)務(wù)模塊最好透明。喚起Activity可以通過(guò)App Links[4]的方式,也就是我們常說(shuō)的url router方式。App Links還可以玩deep link。Github上現(xiàn)在開(kāi)源項(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ì)可能沒(méi)涉及到。服務(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多起來(lái)后,很難找全觀察者和通知者之間的關(guān)系;一些簡(jiǎn)單Event對(duì)象無(wú)法復(fù)用,所以最好二次開(kāi)發(fā)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。

參考

[1] 項(xiàng)目協(xié)同: http://www.baike.com/wiki/%E...

[2] git repo:https://gerrit.googlesource.com/git-repo/

[3] git submodule: https://git-scm.com/book/zh/v1/Git...

[4] App Links:https://developer.android.com/training/app-links/deep-linking.html

[5] ARouter:https://github.com/alibaba/ARouter

[6] EventBus:https://github.com/greenrobot/EventBus


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿拉善右旗| 高青县| 宁陵县| 黑山县| 北流市| 南投县| 定日县| 罗山县| 泽普县| 叶城县| 洛隆县| 合阳县| 武隆县| 汝城县| 福泉市| 江陵县| 永年县| 加查县| 盖州市| 滕州市| 永善县| 滦平县| 韶山市| 沙田区| 石柱| 新密市| 中超| 石楼县| 吉首市| 确山县| 铅山县| 孟州市| 双流县| 青岛市| 侯马市| 吉隆县| 吉隆县| 双牌县| 绥宁县| 连平县| 自贡市|