Android 编码规范(试编)

文章目录

    • 写在前面
    • 名词解释
    • 常用缩写
    • 命名规范
      • applicationId
      • module
      • 代码包结构
      • Class 名
      • 方法名
      • 资源名
        • 1、资源前缀
        • 2、layout 名
        • 3、UI 控件 Id
        • 4、动画文件名
        • 5、strings 名

写在前面

个人认为,模仿编码(别人怎么写我就怎么写)、自主编码(我想怎么写我就怎么写)、规范编码(思考程序应该怎么写),是程序员编码过程中基本都会经历的过程。

前两个没什么好说的,最后一个“规范编码”,大概是程序员进阶所必备技能吧。

毕竟,统一并遵守合理的编码规范,是提高个人开发能力、降低团队沟通协同成本、提升团队开发效率等所不可不做的事情。

本文将对主要适用于 Android 的编码规范进行探讨。

至于同样适用于 Android 的 Java 编码规范,本文不再涉及,建议各位阅读阿里巴巴出品的《码出高效——Java开发手册》一书,其在 Java 编码的规范性及规范的完备性上,大概无出其右了。

名词解释

  • 大驼峰法:形如 FirstApplicationHelloWorld,包含第一个单词在内,所有单词首字母大写,其他字母小写

  • 小驼峰法:形如 firstApplicationHelloWorld,除了第一个单词首字母外,所有单词首字母大写,其他字母小写

常用缩写

注意:任何命名,都应尽量少用缩写,尤其要避免自定义缩写。

全称 缩写 描述
icon ic app图标
background bg view及viewgroup 背景
buffer buf
delete del
document doc
error err
infomation info
image img
length len
library lib
message msg
password pwd
position pos
string str
temp tmp
—— —— ——

省份标识缩写:

安徽,皖:Anhui,简称AH
北京,京:Beijing,简称BJ
福建,闽:Fujian,简称FJ
甘肃,甘:Gansu,简称GS
广东,粤:Guangdong,简称GD
广西,桂:Guangxi,简称GX
贵州,黔:Guizhou,简称GZ
海南,豫:Hainan,简称HI
河北,冀:Hebei,简称HE
河南,豫:Henan,简称HA
黑龙江,黑:Heilongjiang,简称HL
湖北,鄂:Hubei,简称HB
湖南,湘:Hunan,简称HN
吉林,吉:Jilin,简称JL
江苏,苏:Jiangsu,简称JS
江西,赣:Jiangxi,简称JX
内蒙古自治区,蒙:Inner Mongoria IM 简称NM
宁夏,宁:Ningxia 简称NX
青海,青:Qinghai,简称QH
山东,鲁:Shandong,简称SD
山西,晋:Shanxi,简称SX
陕西,陕:Shaanxi,简称SN
上海,沪:Shanghai,简称SH
四川,川:Sichuan,简称SC
天津,津:Tianjing,简称TJ
西藏,藏:Tibet,简称XZ
新疆,新:Xinjiang,简称XJ
云南,滇:Yunnan,简称YN
浙江,浙:Zhejiang,简称ZJ
重庆,渝:Chongqing,简称CQ
澳门,澳:Macao,简称MO
香港,港:Hongkong ,简称HK
台湾,台:Taiwan,简称TW

命名规范

几点说明:
1)要观名知义
2)不要怕长
3)避免出现英文与汉语拼音混用的情况(中文绝对不允许)
4)尽量避免使用缩写,除非是约定俗成的缩写形式,若使用缩写,所有字母都要大写,如 DB、HTML 等

任何命名都需遵从上述说明。

applicationId

重要重要重要!!!

规则:com.drumbeat.项目名.渠道.分公司名

解释:全部小写,以 . 分割,不允许出现下划线等其他符号,不允许出现个人信息

补充:
1)、applicationId 是应用的唯一性标识,当两个应用的 applicationId 不巧的一致时,将被 Android 系统及 Android 应用市场视为同一应用,故以反写的公司域名作为前缀,是比较有效的能够保证 applicationId 唯一性的做法;
2)、当公司内有多款应用,及同一应用需要分成多个可共存于 Android 系统的分身时,按照上述多层级的规则确定应用的 applicationId 是十分必要的。

示例:
com.drumbeat.supplychain.oppo.zhihe
com.drumbeat.supplychain.oppo.shengyu
com.drumbeat.supplychain.vivo.morocco

module

1、moduleName

规则:采用小驼峰法,不使用下划线“_” 短横线“-”等符号进行连接

解释:
1)由于 projectName 会标识项目名,所以 module 名仅需要关心项目下细分的渠道、分公司等层级即可;
2)moduleName 会与 module 包结构及 module 内资源前缀相关,一定要规范起来,分好层级

1.1 application moduleName

规则:以 app 开头,后跟渠道、分公司等信息

示例:
appOppoZhihe

1.2 业务 moduleName

规则:以 main 开头,后跟 业务模块标识、渠道、分公司等信息

解释:
1)前期是一个 main 打天下,包含全部业务代码;
示例:main

2)随着项目变大,某些业务模块需要拆分出来;
示例:mainGoods

3)随着公司发展,有了不同渠道不同分公司,业务上会有差别,某些业务代码需要单独列模块进行处理;
示例:
mainGoodsVivo
maiGoodsVivoMorocco

1.3 library moduleName

规则:以 lib 开头,后跟 library 功能标识

示例:
libBase
libFingerprint

2、module 包结构(重要)

规则:com.drumbeat.项目名.moduleName

解释:
1)全部小写,以 . 分割,不允许出现下划线“_”等其他符号, 不允许出现个人信息
2)由于 moduleName 是采用的小驼峰法,所以可将其中的大写首字母转为小写,并加 . 分割后作为 module 包结构

代码包结构

在 module 包结构(下面以xxx表示)的后面,就是涉及代码的包结构了。

可能大家常见这种形式:
xxx.activity、xxx.fragment、xxx.adapter、xxx.bean、xxx.utils、xxx.view ……

项目小,代码量又小,采用这种方式也未尝不可;但一旦项目变大,代码量变大,页面增多,要找到某一个activity、某一个adapter,就会变得困难。

建议采用下述形式:

规则:xxx.功能模块名.功能模块细分. ~ .className

解释:从功能模块的维度对 class 进行分层细分,便于查找,便于功能模块的独立。

示例:
1)xxx.消息模块.列表模块细分:
xxx.msg.list.MsgListActivity.class
xxx.msg.list.MsgListAdapter.class
2)xxx.消息模块.详情模块细分:
xxx.msg.details.MsgetailsActivity.class
xxx.msg.details.MsgDetailsBean.class

Class 名

规则:
1)采用大驼峰法
2)业务相关的 ClassName,团队内要统一协调定义

下面是一些常用类型的类的统一前缀或后缀:

类型 后缀 前缀 描述
Activity XxxActivity
Fragment XxxFragment
Adapter XxxAdapter
Service XxxService
BroadcastReceiver XxxBroadcast
ContentProvider XxxProvider
实体 XxxBean 注意别错用为 XxxPojo、XxxEntity
帮助类 XxxHelper
数据库操作类 XxxDBHelper
功能类 XxxUtils 没有 util 这种形式,utils 不是 util 的复数(util 跑龙套)
基础共享类 BaseXxx
自定义类 CustomXxx
…… …… …… ……

方法名

规则:
1)采用小驼峰法
2)采用 “谓宾” 结构
3)最好动词开头

示例:
getXxx()
checkXxx()

下面是一些常用的方法形式:

方法 说明 示例
initXxx() 初始化相关方法,使用init为前缀标识 如 初始化布局,initView()
isXxx() 返回值为boolean型的方法 如 邮箱格式判断,isEmail()
onSuccessXxx 执行成功的回调方法 如 获取消息列表的成功回调, onSuccessGetMsgList()
onFailXxx 执行失败的回调方法
showXxx() UI 显示,包括提示、弹窗、UI控件、页面数据加载或者更新等 如 警告框,showWarnningDialog();如 加载消息列表,showMsgList()
hideXxx() UI 隐藏,包括提示、弹窗、UI控件等 如 隐藏取消按钮,hideCancelBtn()
saveXxx() 与保存数据相关的方法 如 获取消息列表,getMessageList()
getXxx() 查询、获取某些数据的方法 如 获取消息列表,getMessageList()
removeXxx() 移除数据 如 从消息列表的数据源中移除某条消息,removeMsgList(int position)
clearXxx() 清空数据的 如 清除消息列表的数据源,clearMsgList()
resetXxx() 重置 如 用户点击重置按钮重置搜索提交,resetParams()
drawXxx() UI 绘制 如绘制圆形 drawCircle()
measureXxx() 测量
…… …… ……

资源名

1、资源前缀

通过设置资源前缀的形式,可避免自己的 module 间,或者自己的 module 与 第三方 module 出现资源冲突。
设置方法是在 module 的 gradle 中配置如下代码:

allprojects {
    afterEvaluate {
        android {
            resourcePrefix "${project.name}_"
        }
    }
}

需要注意的有:
1)此方法对 图片 资源无效(.jpg、.png等),对除 图片 资源外的其他资源,如 layout、strings、colors、styles、drawable(.xml形式)等有效;
2)当资源名没有以设置的资源前缀开头时,编译器会报红警告;

2、layout 名

规则:
1)全部小写
2)下划线”_“分割

下面是一些常用的 layout 类型(moduleName以"xxx“表示):

类型 规则 示例 描述
activity 布局 xxx_activity_业务名称 xxx_activity_login
fragment 布局 xxx_fragment_业务名称 xxx_fragment_home
列表条目布局 xxx_item_业务名称 xxx_item_msg
布局组成元素布局 xxx_view_业务名称 xxx_view_share 可通过 include 方式引入
—— —— —— ——

3、UI 控件 Id

规则:
1、采用小驼峰法
2、避免使用下划线”_“ 短横线”-“ 等分隔符
3、UI 控件类型缩写开头,如 btnAdd、tvCancel
4、严禁使用无含义名称,如 tv1、textview1
5、可与所属页面名结合在一起

下表是一些常见类型 UI 控件的 缩写 形式:

全称 缩写
button btn
textView tv
editText et
radioGroup rg
radioButton rb
checkbox cb
imageView iv
listView lv
recyclerView rv
—— ——

4、动画文件名

规则:
1)全部小写
2)下划线”_“分割
3)体现实现的动画效果
4)体现动画的起止状态

下表是几个示例:

动画效果 命名示例
淡入 xxx_fade_in
淡出 xxx_fade_out
从下方推入 xxx_push_down_in
放大/缩小 变形进入 xxx_zoom_enter
—— ——

5、strings 名

规则:
moduleName_pageName_功能

解释:
1)全部小写
2)下划线”_“分割
3)要体现应用的模块、页面等信息,将 moduleName 的大写转为小写并用 ”_“ 分割

示例:
app_oppo_splash_welcome
main_home_title

你可能感兴趣的:(Android,基础)