[轉]Android開發規範(updating)

_小馬快跑_發表於2017-12-15

原文連結:https://github.com/Blankj/AndroidStandardDevelop

安卓開發規範(updating) 摘要 1 前言 2 AS規範 3 命名規範 4 資原始檔規範 5 版本統一規範 6 第三方庫規範 7 註釋規範 8 測試規範 9 RN規範 10 其他的一些規範

1 前言 為了利於專案維護以及規範開發,促進成員之間Code Review的效率,故提出以下開發規範,如有更好建議,歡迎到GitHub提issue,原文地址: 安卓開發規範(updating) 2 AS規範 工欲善其事,必先利其器。 儘量使用最新版的IDE進行開發; 編碼格式統一為UTF-8; 編輯完.java , .xml 等檔案後一定要格式化(基本格式方面使用 AS 預設模板即可); 刪除多餘的import,減少警告出現,可利用AS的Optimize Imports (Settings → Keymap → Optimize Imports)快捷鍵; AS常用開發外掛可以參考這裡~**AS常用開發外掛**

3 命名規範 程式碼中的命名嚴禁使用拼音與英文混合的方式,更不允許直接使用中文的方式。正確的英文拼寫和語法可以讓閱讀者易於理解,避免歧義。 注意:即使純拼音命名方式也要避免採用。但alibaba 、taobao 、youku 、hangzhou 等國際通用的名稱,可視同英文。

3.1 包名 包名全部小寫,連續的單詞只是簡單地連線起來,不使用下劃線。 採用反域名命名規則,全部使用小寫字母。一級包名是頂級域名,通常為com ,edu ,gov ,net ,org 等,二級包名為公司名,三級包名根據應用進行命名,四級包名為模組名或層級名。 包名 此包中包含

com.xx.應用名稱縮寫.activity 使用者介面中所有的Activity類

com.xx.應用名稱縮寫.fragment 介面中所有的Fragment類

com.xx.應用名稱縮寫.base 基礎共享的類

com.xx.應用名稱縮寫.adapter 頁面用到的Adapter類 (介面卡的類)

com.xx.應用名稱縮寫.view 自定義的View類

com.xx.應用名稱縮寫.util 此包中包含:公共工具方法類(util模組名)

com.xx.應用名稱縮寫.bean 下面可分:vo、po、dto 此包中包含:JavaBean類

com.xx.應用名稱縮寫.model 此包中包含:模型類

com.xx.應用名稱縮寫.db 資料庫操作類

com.xx.應用名稱縮寫.view (或者 com.xx.應用名稱縮寫.widget ) 自定義的View類等

com.xx.應用名稱縮寫.service Service服務

com.xx.應用名稱縮寫.receiver BroadcastReceiver服務

com.xx.應用名稱縮寫.config 所有的配置相關的類

注意:如果專案採用MVP,所有M、V、P抽取出來的介面都放置在相應模組的i包下,所有的實現都放置在相應模組的impl下

3.2 類名 類名都以UpperCamelCase 風格編寫。 類名通常是名詞或名詞短語,介面名稱有時可能是形容詞或形容詞短語。現在還沒有特定的規則或行之有效的約定來命名註解型別。 名詞,採用大駝峰命名法,儘量避免縮寫,除非該縮寫是眾所周知的, 比如HTML , URL ,如果類名稱中包含單詞縮寫,則單詞縮寫的每個字母均應大寫。 類 描述 例如

Activity 類 Activity為字尾標識 歡迎頁面類WelcomeActivity

Adapter類 Adapter 為字尾標識 新聞詳情介面卡 NewDetailAdapter

解析類 Parser為字尾標識 首頁解析類HomePosterParser

工具方法類 Utils或Manager為字尾標識(與系統或第三方的Utils區分)或功能+Utils 執行緒池管理類:ThreadPoolManager日誌工具類:LogUtils(Logger也可)列印工具類:PrinterUtils

資料庫類 以DBHelper字尾標識 新聞資料庫:NewDBHelper

Service類 以Service為字尾標識 時間服務TimeService

BroadcastReceiver類 以Receiver為字尾標識 推送接收JPushReceiver

ContentProvider類 以Provider為字尾標識 ShareProvider

自定義的共享基礎類 以Base開頭 BaseActivity,BaseFragment

測試類的命名以它要測試的類的名稱開始,以Test結束。例如:HashTest 或HashIntegrationTest 。 介面(interface):命名規則與類一樣採用大駝峰命名法,多以able或ible結尾,如interface Runnable 、interface Accessible 。 注意:如果專案採用MVP,所有Model、View、Presenter的介面都以I為字首,不加字尾,其他的介面採用上述命名規則。

3.3 方法名 方法名都以lowerCamelCase 風格編寫。 方法名通常是動詞或動詞短語。 方法 說明

initXX() 初始化相關方法,使用init為字首標識,如初始化佈局initView()

isXX() checkXX() 方法返回值為boolean型的請使用is或check為字首標識

getXX() 返回某個值的方法,使用get為字首標識

setXX() 設定某個屬性值

handleXX()/processXX() 對資料進行處理的方法

displayXX()/showXX() 彈出提示框和提示資訊,使用display/show為字首標識

updateXX() 更新資料

saveXX() 儲存資料

resetXX() 重置資料

clearXX() 清除資料

removeXX() 移除資料或者檢視等,如removeView();

drawXX() 繪製資料或效果相關的,使用draw字首標識

3.4 常量名 常量名命名模式為CONSTANT_CASE ,全部字母大寫,用下劃線分隔單詞。那,到底什麼算是一個常量? 每個常量都是一個靜態final 欄位,但不是所有靜態final 欄位都是常量。在決定一個欄位是否是一個常量時,考慮它是否真的感覺像是一個常量。例如,如果任何一個該例項的觀測狀態是可變的,則它幾乎肯定不會是一個常量。只是永遠不打算改變物件一般是不夠的,它要真的一直不變才能將它示為常量。 // Constantsstatic final int NUMBER = 5;static final ImmutableListNAMES = ImmutableList.of("Ed", "Ann");static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutablestatic final SomeMutableType[] EMPTY_ARRAY = {};enum SomeEnum { ENUM_CONSTANT }// Not constantsstatic String nonFinal = "non-final";final String nonStatic = "non-static";static final SetmutableCollection = new HashSet();static final ImmutableSetmutableElements = ImmutableSet.of(mutable);static final Logger logger = Logger.getLogger(MyClass.getName());static final String[] nonEmptyArray = {"these", "can", "change"};

3.5 非常量欄位名 非常量欄位名以lowerCamelCase 風格的基礎上改造為如下風格:基本結構為scopeVariableNameType 。 scope:範圍 非公有,非靜態欄位命名以m開頭。 靜態欄位命名以s開頭。 公有非靜態欄位命名以p開頭。 公有靜態欄位(全域性變數)命名以g開頭。 例子: public class MyClass { int mPackagePrivate; private int mPrivate; protected int mProtected; private static MyClass sSingleton; public int pField; public static int gField;}

使用1字元字首來表示作用範圍,1個字元的字首必須小寫,字首後面是由表意性強的一個單詞或多個單片語成的名字,而且每個單詞的首寫字母大寫,其它字母小寫,這樣保證了對變數名能夠進行正確的斷句。 Type:型別 考慮到Android中使用很多UI控制元件,為避免控制元件和普通成員變數混淆以及更好達意,所有用來表示控制元件的成員變數統一加上控制元件縮寫作為字尾(文末附有縮寫表)。 對於普通變數一般不新增型別字尾,如果統一新增型別字尾,請參考文末的縮寫表。 用統一的量詞通過在結尾處放置一個量詞,就可建立更加統一的變數,它們更容易理解,也更容易搜尋。 注意:如果專案中使用ButterKnife ,則不新增m字首,以lowerCamelCase 風格命名。

例如,請使用mCustomerStrFirst 和mCustomerStrLast ,而不要使用mFirstCustomerStr 和mLastCustomerStr 。 量詞列表 量詞字尾說明

First 一組變數中的第一個

Last 一組變數中的最後一個

Next 一組變數中的下一個變數

Prev 一組變數中的上一個

Cur 一組變數中的當前變數

說明: 集合新增如下字尾:List、Map、Set陣列新增如下字尾:Arr 注意:所有的VO(值物件)統一採用標準的lowerCamelCase風格編寫,所有的DTO(資料傳輸物件)就按照介面文件中定義的欄位名編寫。

3.6 引數名 引數名以lowerCamelCase 風格編寫。引數應該避免用單個字元命名。 3.7 區域性變數名 區域性變數名以lowerCamelCase 風格編寫,比起其它型別的名稱,區域性變數名可以有更為寬鬆的縮寫。 雖然縮寫更寬鬆,但還是要避免用單字元進行命名,除了臨時變數和迴圈變數。 即使區域性變數是final和不可改變的,也不應該把它示為常量,自然也不能用常量的規則去命名它。 3.8 臨時變數 臨時變數通常被取名為i 、j 、k 、m 和n ,它們一般用於整型;c 、d 、e ,它們一般用於字元型。 如:for (int i = 0; i < len ; i++) 。 3.9 型別變數名 型別變數可用以下兩種風格之一進行命名: 單個的大寫字母,後面可以跟一個數字(如:E , T , X , T2 )。 以類命名方式(參考3.2 類名),後面加個大寫的T (如:RequestT , FooBarT )。

更多還可參考~**阿里巴巴Java開發手冊** 4 資原始檔規範 4.1 資源佈局檔案(XML檔案(layout佈局檔案)) 全部小寫,採用下劃線命名法 4.1.1 contentView命名 必須以全部單詞小寫,單詞間以下劃線分割,使用名詞或名詞片語。 所有Activity或Fragment的contentView必須與其類名對應,對應規則為:將所有字母都轉為小寫,將型別和功能調換(也就是字尾變字首)。 例如:activity_main.xml

4.1.2 Dialog命名 規則:dialog_描述.xml

例如:dialog_hint.xml

4.1.3 PopupWindow命名 規則:ppw_描述.xml

例如:ppw_info.xml

4.1.4 列表項命名 規則:item_描述.xml

例如:item_city.xml

4.1.5 包含項命名 規則:模組_(位置)描述.xml

例如:activity_main_head.xml 、activity_main_bottom.xml

注意:通用的包含項命名採用:專案名稱縮寫_描述.xml

例如:xxxx_title.xml

4.2 資原始檔(圖片drawable資料夾下) 全部小寫,採用下劃線命名法,加字首區分 命名模式:可加字尾 _small  表示小圖, _big  表示大圖,邏輯名稱可由多個單詞加下劃線組成,採用以下規則: 用途_模組名_邏輯名稱

用途_模組名_顏色

用途_邏輯名稱

用途_顏色

說明:用途也指控制元件型別(具體見附錄UI控制元件縮寫表) 例如: 名稱 說明

btn_main_home.png 按鍵

divider_maket_white.png 分割線

ic_edit.png 圖示

bg_main.png 背景

btn_red.png 紅色按鍵

btn_red_big.png 紅色大按鍵

ic_head_small.png 小頭像

bg_input.png 輸入框背景

divider_white.png 白色分割線

如果有多種形態,如按鈕選擇器:btn_xx.xml (selector) 名稱 說明

btn_xx 按鈕圖片使用btn_整體效果 (selector)

btn_xx_normal 按鈕圖片使用btn_正常情況效果

btn_xx_pressed 按鈕圖片使用btn_點選時候效果

btn_xx_focused state_focused 聚焦效果

btn_xx_disabled state_enabled  (false)不可用效果

btn_xx_checked state_checked 選中效果

btn_xx_selected state_selected 選中效果

btn_xx_hovered state_hovered 懸停效果

btn_xx_checkable state_checkable 可選效果

btn_xx_activated state_activated 啟用的

btn_xx_windowfocused state_window_focused

bg_head 背景圖片使用bg_功能_說明

def_search_cell 預設圖片使用def_功能_說明

ic_more_help 圖示圖片使用ic_功能_說明

seg_list_line 具有分隔特徵的圖片使用seg_功能_說明

sel_ok 選擇圖示使用sel_功能_說明

注意:使用AndroidStudio的外掛SelectorChapek 可以快速生成selector,前提是命名要規範。

4.3 動畫檔案(anim資料夾下) 全部小寫,採用下劃線命名法,加字首區分。 具體動畫採用以下規則:模組名_邏輯名稱 。 例如:refresh_progress.xml 、market_cart_add.xml 、market_cart_remove.xml 。 普通的tween動畫採用如下表格中的命名方式:動畫型別_方向

名稱 說明

fade_in 淡入

fade_out 淡出

push_down_in 從下方推入

push_down_out 從下方推出

push_left 推向左方

slide_in_from_top 從頭部滑動進入

zoom_enter 變形進入

slide_in 滑動進入

shrink_to_middle 中間縮小

4.4 values中name命名 4.4.1 colors.xml colors 的name 命名使用下劃線命名法,在你的colors.xml 檔案中應該只是對映顏色的名稱一個ARGB值,而沒有其它的。不要使用它為不同的按鈕來定義ARGB值。 不要這樣做 #FFFFFF #2A91BD #5F5F5F #939393 #FFFFFF #FF9D2F ... #323232

使用這種格式,你會非常容易的開始重複定義ARGB值,這使如果需要改變基本色變的很複雜。同時,這些定義是跟一些環境關聯起來的,如button 或者comment , 應該放到一個按鈕風格中,而不是在color.xml 檔案中。 相反,這樣做 #FFFFFF #DBDBDB #939393 #5F5F5F #323232 #27D34D #2A91BD #FF9D2F #FF432F

嚮應用設計者那裡要這個調色盤,名稱不需要跟"green" 、"blue" 等等相同。"brand_primary" 、"brand_secondary" 、"brand_negative" 這樣的名字也是完全可以接受的。 像這樣規範的顏色很容易修改或重構,會使應用一共使用了多少種不同的顏色變得非常清晰。 通常一個具有審美價值的UI來說,減少使用顏色的種類是非常重要的。 4.4.2 dimens.xml 像對待colors.xml 一樣對待dimens.xml 檔案 與定義顏色調色盤一樣,你同時也應該定義一個空隙間隔和字型大小的“調色盤”。 一個好的例子,如下所示: 22sp 18sp 15sp 12sp 40dp 24dp 14dp 10dp 4dp 60dp 40dp 32dp

佈局時在寫margins 和paddings 時,你應該使用spacing_xxxx 尺寸格式來佈局,而不是像對待string 字串一樣直接寫值。 這樣寫會非常有感覺,會使組織和改變風格或佈局是非常容易。 4.4.3 strings.xml strings 的name 命名使用下劃線命名法,採用以下規則:模組名+邏輯名稱

名稱 說明

main_menu_about 主選單按鍵文字

friend_title 好友模組標題欄

friend_dialog_del 好友刪除提示

login_check_email 登入驗證

dialog_title 彈出框標題

button_ok 確認鍵

loading 載入文字

4.4.4 styles.xml 幾乎每個專案都需要適當的使用style 檔案,因為對於一個檢視來說有一個重複的外觀是很常見的,將所有的外觀細節屬性(colors 、padding 、font )放在style 檔案中。 在應用中對於大多數文字內容,最起碼你應該有一個通用的style檔案,例如:

應用到TextView 中:

你或許需要為按鈕控制元件做同樣的事情,不要停止在那裡。將一組相關的和重複android:**** 的屬性放到一個通用的style 中。 將一個大的style 檔案分割成多個檔案, 你可以有多個styles.xml  檔案。Android SDK支援其它檔案,styles 這個檔名稱並沒有作用,起作用的是在檔案 裡xml的

相關文章