android包结构规范,【Android】Android产品-开发规范
前言
為什么需要開發(fā)規(guī)范?
編碼規(guī)范對(duì)于程序員而言尤為重要,有以下幾個(gè)原因:
1)一個(gè)軟件的生命周期中,80%的花費(fèi)在于維護(hù)
2)幾乎沒有任何一個(gè)軟件,在其整個(gè)生命周期中,均由最初的開發(fā)人員來維護(hù)
3)編碼規(guī)范可以改善軟件的可讀性,可以讓程序員盡快而徹底地理解新的代碼
4)如果你將源碼作為產(chǎn)品發(fā)布,就需要確任它是否被很好的打包并且清晰無誤,一如你已構(gòu)建的其它任何產(chǎn)品
開發(fā)規(guī)范的作用
1)減少維護(hù)花費(fèi)
2)提高可讀性
3)加快工作交接
4)減少名字增生
5)降低缺陷引入的機(jī)會(huì)
##2 命名規(guī)范 ###2.1 常量命名規(guī)范
####2.1.1 類型 常量命名規(guī)范 ####2.1.2 說明 常量用于保存需要常駐內(nèi)存中并且經(jīng)常使用變化不多的數(shù)據(jù),定義常量的名稱的時(shí)候需要遵循望文知意的原則; ####2.1.3 規(guī)則
全部為大寫字母;
中間以“_”連接;
望文知意原則;
####2.1.4 備注 代碼中涉及到直接使用某個(gè)字符串或者其他基本類型的值時(shí),建議定義成常量,避免多處直接使用同樣的值作為參數(shù)。
####2.1.5 舉例
如:定義一個(gè)常量表示最小屏幕寬度的常量,則可以定義一個(gè)int類型的常量,該常量可以命名為:“MIN_SCREEN_WIDTH“;
其他舉例:
例如:static final int MIN_SCREEN_WIDTH = 4;( √)
例如:static final int min_screen_width = 4;(×)
例如:static final int minScreenWidth = 4; (×)
例如:static final int WIDTH = 4;(×)
例如:static final int width = 4;(×)
例如:static final int wd = 4;(×)
###2.2 變量命名規(guī)范 ####2.2.1 類型 變量命名規(guī)范 ####2.2.2 說明 變量用于保存系統(tǒng)中的臨時(shí)數(shù)據(jù),變量命名時(shí)遵循望文知意,簡(jiǎn)單明了,駝峰標(biāo)示等原則。 ####2.2.3 規(guī)則
首字母大寫;
java駝峰命名;
望文知意原則;
推薦引用類型變量添加前綴“m”;
如果是View組件變量,則組件名稱為xml文件中定義的ID名稱去掉下劃線,下劃線后一位大寫;
####2.2.4 備注 無
####2.2.5 舉例
如:定義一個(gè)表示最小屏幕寬度的變量,則可以定義一個(gè)int型的臨時(shí)變量為:mMinScreenWidth;
例如:static final int mMinScreenWidth = 4; ( √)
例如:static final int minWidth = 4;(×)
例如:static final int screenWidth = 4;(×)
例如:static final int width = 4;(×)
例如:static final int min = 4; (×)
例如:static final int msw = 4; (×)
###2.3 方法命名規(guī)范
####2.3.1 類型 方法命名規(guī)范
####2.3.2 說明 方法名的命名應(yīng)該遵循簡(jiǎn)單明了的原則;
####2.3.3 規(guī)則
首字母小寫;
java駝峰命名;
簡(jiǎn)單明了原則;
初始化View方法init*(每個(gè)init做一件事)
####2.3.4 備注
同時(shí)在方法的實(shí)現(xiàn)上,盡量不要在一個(gè)方法中出現(xiàn)太多實(shí)現(xiàn)代碼,如一個(gè)方法有幾百行的實(shí)現(xiàn)邏輯,推薦在邏輯復(fù)雜時(shí),按功能點(diǎn)拆分出多個(gè)方法,便于閱讀。
另外,出現(xiàn)功能一樣的實(shí)現(xiàn)邏輯,盡量抽取公用方法,避免將實(shí)現(xiàn)邏輯復(fù)制到多個(gè)用到的地方。
####2.3.5 舉例
如:定義一個(gè)獲取屏幕寬度的方法,依照上述原則,則可以定義為一個(gè)靜態(tài)方法:public static int getScreenWidth();
例如:public static int getScreenWidth();( √)
例如:public static int getscreenwidth();(×)
例如:public static int getScreenwidth();(×)
例如:public static int getWidth();(×)
例如:public static int getScreen();(×)
例如:public static int getSW();(×)
###2.4 類命名規(guī)范
####2.4.1 類型 類命名規(guī)范
####2.4.2 說明 類名主要表示一個(gè)類的作用,需要簡(jiǎn)明扼要,望文知意,并且首字母大寫。
####2.4.3 規(guī)則
首字母大寫;
java駝峰命名;
望文知意原則;
能夠說明類的功能和主要作用(注釋的作用);
Acitivity類以Acitivity結(jié)尾;
Fragment類以Fragment結(jié)尾;
Service類以Service結(jié)尾;
BroadcastReceiver類以Receiver結(jié)尾;
ContentProvider類以Provider結(jié)尾;
Application類以Application結(jié)尾;
自定義View類以Custom**View結(jié)尾;
自定義Adapter類以Adapter結(jié)尾;
adapter中的ViewHolder以Holder結(jié)尾;
實(shí)體Bean以Model結(jié)尾;
####2.4.4 備注 無
####2.4.5 舉例
如:定義一個(gè)獲取屏幕信息的工具類,則可以定義為public class ScreenUtils;
例如:public class ScreenUtils; ( √)
例如:public class Screenutils; (×)
例如:public class Screen; (×)
例如:public class screenutils; (×)
例如:public class screen; (×)
例如:public class su;(x)
###2.5 接口命名規(guī)范
####2.5.1 類型 接口命名規(guī)范
####2.5.2 說明 接口命名需要簡(jiǎn)單明了,長(zhǎng)度不宜過長(zhǎng);
####2.5.3 規(guī)則
首字母大寫(第二個(gè)字母也是大寫);
java駝峰命名;
望文知意原則;
建議在名稱前面追加“I”;
####2.5.4 備注
I**Listener
I**CallBack
I**;
####2.5.5 舉例
如:定義一個(gè)activity的方法接口,實(shí)現(xiàn)接口中的某些方法:public interface IFunctionListener;
例如:public interface IFunctionListener;( √)
例如:public interface BaseActivity; (×)
例如:public interface Baseactivityinter; (×)
例如:public interface BaseInter; (×)
例如:public interface ActivityInter;(×)
###2.6 包名規(guī)范
####2.6.1 類型 包名規(guī)范
####2.6.2 說明 用于分類管理類文件;
####2.6.3 規(guī)則
所有字母小寫;
簡(jiǎn)單明了,層級(jí)很深,沒有拼接的包名;
望文知意;
按功能劃分包名,如“我的”
工具類可以劃分為一個(gè)工具類的包名,utils,里面可以添加包名層級(jí);
系統(tǒng)類的可以劃分為一個(gè)系統(tǒng)類的包,system,里面可以添加包名層級(jí);
組件類的可以劃分為一個(gè)組件類的包,***,里面添加adapter的包名,自定義view包名;
Service類的可以劃分為一個(gè)服務(wù)類的包,service,里面可以添加包名層級(jí);
數(shù)據(jù)庫(kù)相關(guān)類可以劃分為一個(gè)數(shù)據(jù)庫(kù)類,db,里面可以添加數(shù)據(jù)庫(kù)相關(guān)類,Bean類,數(shù)據(jù)庫(kù)服務(wù)類等;
廣播類的可以劃分為廣播類的包,receiver,可以放一些廣播相關(guān)的類;
網(wǎng)絡(luò)類相關(guān)的可以劃分為,network,放一些網(wǎng)絡(luò)相關(guān)的類;
Fragment類存放在fragment包下;
Activity類存放在Activity包下;
####2.6.4 備注 無
####2.6.5 舉例 無
###2.7 目錄名稱規(guī)范
####2.7.1 類型 目錄名稱規(guī)范
####2.7.2 說明 主要是一些jar包,so文件的配置目錄名稱;
####2.7.3 規(guī)則
全部為小寫字母;
簡(jiǎn)單明了;
望文知意;
駝峰表示;
####2.7.4 備注 無
####2.7.5 舉例
后期增加目錄的可能性不多,現(xiàn)列舉出系統(tǒng)中存在的目錄結(jié)構(gòu):
lib:第三方j(luò)ar的保存路徑;
jniLibs:jni引用的so文件的目錄;
###2.8 布局文件名稱規(guī)范
####2.8.1 類型 布局文件名稱規(guī)范
####2.8.2 說明 主要包含資源文件的命名問題;
####2.8.3 規(guī)則
全部為小寫字母;
中間以"_"連接;
望文知意原則;
布局文件的開頭問類名;
列表項(xiàng)的xml布局文件名稱:類名_item.xml;
activity類的xml文件名稱:類名_activity.xml;
fragment類的xml文件名稱:類名_fragment.xml;
自定義View的xml文件的名稱:類名_父類名.xml;
####2.8.4 備注 無
####2.8.5 舉例 如:如定義H5Activity的xml文件名稱,則可以定義為h5.xml;盡量不使用大寫字母等。
###2.9 drawable文件名稱規(guī)范
####2.9.1 類型 drawable文件名稱命名規(guī)范
####2.9.2 說明 主要包含資源文件的命名問題;
####2.9.3 規(guī)則
全部為小寫字母;
中間以"_"連接;
望文知意原則;
布局文件的開頭問類名;
11_22_33_44,44:selector,shape(大概五六個(gè),暫時(shí)不定義其他的); 33:src、bg、color(可擴(kuò)展,可為空); 22:狀態(tài)名稱或者為空;11:業(yè)務(wù)名稱
####2.9.4 備注 無
####2.9.5 舉例 無
###2.10 資源ID規(guī)范
####2.10.1 類型 資源ID命名規(guī)范
####2.10.2 說明 各種資源ID的定義問題;
####2.10.3 規(guī)則
全部為小寫字母;
中間以"_"連接;
望文知意原則;
####2.10.4 備注 可以考慮按照組件的名稱的縮寫作為前綴,(同一個(gè)xml文件中ID名稱不能重復(fù))如:組件簡(jiǎn)寫(大寫字母縮寫)_業(yè)務(wù)名稱 TextView的組件:tv_pay_money Button的組件:btn_pay_money EditText的組件:et_user_name LinerLayout組件:ll_container
####2.10.5 舉例 如:比如一個(gè)textview組件,可點(diǎn)擊用于支付的按鈕,則可以把ID定義為: tv_pay_money;
##3 注釋規(guī)范
###3.1 類注釋 在類、接口定義之前當(dāng)對(duì)其進(jìn)行注釋,包括類、接口的目的、作用、功能、繼承于何種父類,實(shí)現(xiàn)的接口、實(shí)現(xiàn)的算法、使用方法、示例程序等。 /** * author:作者 * time:時(shí)間 * desc:描述 */
###3.2 方法注釋 方法注釋的模板: /** * desc:描述 * @param 參數(shù)名 參數(shù)描述 * @param 參數(shù)名2 參數(shù)描述 * @return 返回值類型說明 * @throws Exception 異常說明 */
###3.3 類成員變量和常量注釋 成員變量和常量需要使用如下注釋的形式,注釋位于變量的上側(cè); /** * **/
###3.4 內(nèi)部邏輯注釋 內(nèi)部邏輯注釋模板: //支付成功 if (response.getRet() == 0) { Toast.makeText(H5Activity.this, "支付成功", Toast.LENGTH_LONG).show(); goToNext(response); } //支付失敗 else if (response.getRet() == -1) { Toast.makeText(H5Activity.this, "支付失敗", Toast.LENGTH_LONG).show(); //刷新當(dāng)前頁(yè)面 reflush(currentUrl); }
##4 代碼順序
###4.1 代碼順序 在一個(gè)典型的Activity中代碼的順序如下: /** * author:sh * desc:該class的作用 * time:yyyy-MM-dd / public class ClassName { //(1) 成員變量集合 //(2) 回調(diào)方法集合 若該類為activity,則:onCreate、、onDestory; 若該類為Fragment、則:onCreateView、**、onDestory; //(3) 其他方法集合 }
##5 代碼風(fēng)格
###5.1 大括號(hào)換行 左大括號(hào)不換行,右大括號(hào)換行; class MyClass { int func() { if (something) { // ... } else if (somethingElse) { // ... } else { // ... } } }
###5.2 小括號(hào)空格 if (condition) { body(); } // 推薦
###5.3 縮進(jìn)
4 個(gè)空格作為縮進(jìn)排版的一個(gè)單位,不使用制表符 tab。
8 個(gè)空格作為換行后的縮進(jìn),包括函數(shù)調(diào)用和賦值。
Instrument i = someLongexpression_r(that, NotFit, on, one, line); // 推薦
###5.4 每一行的長(zhǎng)度
盡量避免一行的長(zhǎng)度超過 100 個(gè)字符。
例外:如果注釋行包含了超過 100 個(gè)字符的命令示例或者 url 文字,為了便于剪切和復(fù)制,其長(zhǎng)度可以超過 100 個(gè)字符。
例外:import 行可以超過限制,因?yàn)楹苌儆腥藭?huì)去閱讀它。這也簡(jiǎn)化了編程工具的寫入操作。
###5.5 每次聲明一個(gè)變量
推薦一行一個(gè)聲明,因?yàn)檫@樣以利于寫注釋;
int level; // indentation level
int size; // size of table
###5.6 if-else語句 if-else語句應(yīng)該具有如下格式: if (condition) { statements; }
if (condition) {
statements;
} else {
statements;
}
if (condition) {
statements;
} else if (condition) {
statements;
} else{
statements;
}
注意:if語句總是用”{“和”}“括起來,避免使用如下容易引起錯(cuò)誤的格式:
if (condition) // 避免
statement;
###5.7 for語句 一個(gè)for語句應(yīng)該具有如下格式: for (initialization; condition; update) { statements; } 當(dāng)在for語句的初始化或更新子句中使用逗號(hào)時(shí),避免因使用三個(gè)以上變量,而導(dǎo)致復(fù)雜度提高。 若需要,可以在for循環(huán)之前(為初始化子句)或for循環(huán)末尾(為更新子句)使用單獨(dú)的語句。
###5.8 while語句 一個(gè)while語句應(yīng)該具有如下格式: while (condition) { statements; }
###5.9 do-while語句 do { statements; } while (condition);
###5.10 switch語句 一個(gè)switch語句應(yīng)該具有如下格式: switch (condition) { case ABC: statements; /* falls through */ case DEF: statements; break;
case XYZ:
statements;
break;
default:
statements;
break;
}
每當(dāng)一個(gè)case順著往下執(zhí)行時(shí)(因?yàn)闆]有break語句),通常應(yīng)在break語句的位置添加注釋。
##6 異常規(guī)范
###6.1 異常名稱 定義異常的時(shí)候,異常的后綴名稱以Exception結(jié)尾,及**Exception;
###6.2 異常描述 盡量英文描述,簡(jiǎn)單明了;
###6.3 異常格式 一個(gè)try-catch語句應(yīng)該具有如下格式: try { statements; } catch (ExceptionClass e) { statements; }
try {
statements;
} catch (ExceptionClasse) {
statements;
} finally {
statements;
}
##7 其他規(guī)范
###7.1 源文件的函數(shù)小于2K 一般來說源文件的行數(shù)不能大于2K行,過多的話可以考慮拆分功能,拆分函數(shù)等;
###7.2 使用TODO注釋
對(duì)那些臨時(shí)性的、短期的、夠棒但不完美的代碼,請(qǐng)使用 TODO 注釋。
TODO 注釋應(yīng)該包含全部大寫的 TODO,后跟一個(gè)冒號(hào):
// TODO: Remove this code after the UrlTable2 has been checked in.
// TODO: Change this to use a flag instead of a constant. 如果 TODO 注釋是“將來要做某事”的格式)。
###7.3 使用自定義LOG 在系統(tǒng)中需要打印LOG的時(shí)候,盡量使用自定義的LOG,自定義的LOG在開發(fā)環(huán)境的時(shí)候會(huì)打印日志,正式環(huán)境的時(shí)候不會(huì)打印日志。
###7.4 使用自定義TAG 在系統(tǒng)打印LOG的時(shí)候,使用TAG盡量使用tab,同意的TAG標(biāo)志。
本文轉(zhuǎn)載自【一片楓葉】
總結(jié)
以上是生活随笔為你收集整理的android包结构规范,【Android】Android产品-开发规范的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: warframe计算机拒绝访问,Win1
- 下一篇: python不同版本共存_多个pytho