工程命名:
這里直說 android 工程,android 的工程命名很簡單,這個項目叫什么,工程名我們就怎么叫,比如微信 - weixin??梢允褂闷匆簦峭扑]盡量不使用拼音,另外全小寫

如上圖,就是我們新建一個android項目時,我們填入的名字對應(yīng)的位置。
根包名:
* 包名全部小寫
* 一級包名是頂級域名,通常為 com、edu、gov、net、org 等
* 二級包名為公司名
* 三級包名就是項目名
這符合上圖顯示的部分。
模塊
Android 發(fā)展到現(xiàn)今,模塊分離是一種通常,必須的做法。模塊有時候很大,又會分解成2級模塊,所以模塊的命名一定要有傳承性。
* 模塊名:
上級模塊名+本模塊名+module,中間使用_連接,沒有上級模塊就不要加上了,module表示模塊,可以根據(jù)喜好選擇加不加上,一般還是要加上。
* 包名:
在項目包名的基礎(chǔ)上,加上:
* 四級包名:上級模塊名
* 五級包名:本模塊名
* 沒有上級模塊的不用加
* 模塊分層:
通常我們按照以下幾個基本方面對模塊進(jìn)行劃分:
* core(能力層。與具體業(yè)務(wù)無關(guān),提供能力)
* base(基礎(chǔ)服務(wù)層??梢元毩⒋嬖?,有且只有一個具有實際意義的服務(wù),不依賴于其他的服務(wù))
* business(業(yè)務(wù)服務(wù)層。依賴多個基礎(chǔ)服務(wù),一般是一個流程性的服務(wù))
- 參考以上的代碼結(jié)構(gòu),按功能分包具體可以這樣做:
com
└── domain
└── app
├── App.java 定義 Application 類
├── Config.java 定義配置數(shù)據(jù)(常量)
├── base 基礎(chǔ)組件
├── custom_view 自定義視圖
├── data 數(shù)據(jù)處理
│ ├── DataManager.java 數(shù)據(jù)管理器,
│ ├── local 來源于本地的數(shù)據(jù),比如 SP,Database,F(xiàn)ile
│ ├── model 定義 model(數(shù)據(jù)結(jié)構(gòu)以及 getter/setter、compareTo、equals 等等,不含復(fù)雜操作)
│ └── remote 來源于遠(yuǎn)端的數(shù)據(jù)
├── feature 功能
│ ├── feature0 功能 0
│ │ ├── feature0Activity.java
│ │ ├── feature0Fragment.java
│ │ ├── xxAdapter.java
│ │ └── ... 其他 class
│ └── ...其他功能
├── injection 依賴注入
├── util 工具類
└── widget 小部件
統(tǒng)一依賴
module 中涉及到的依賴庫版本應(yīng)該和主 app 保持一致,我們應(yīng)該維護(hù)一個各模塊依賴基礎(chǔ)版本庫,當(dāng)主項目摸個依賴版本過于低下時,我們也應(yīng)該在主項目處修改依賴庫版本,而不是把依賴版本下方到每個模塊中,雖然 studio 工具可以較好的掃描,合并每個模塊的依賴庫版本然后取其中最高的,但是這是被動的,我們應(yīng)該主動的發(fā)起依賴管理,通暢的做法,都是在根目錄中新建 一個config.gradle 腳本,然后在里面書寫依賴庫版本號,然后作為全局變量提供給依賴的 module使用:
第三方庫
關(guān)于第三方開源庫的問題,我們應(yīng)該使用那些優(yōu)秀的,廣為人知的優(yōu)秀的庫,那么優(yōu)秀的庫怎么找呢,看這里: