Android 编码规范(试编)

写在前面

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

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

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

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

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

名词解释

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

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

常用缩写

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

全称缩写描述
iconicapp图标
backgroundbgview及viewgroup 背景
bufferbuf
deletedel
documentdoc
errorerr
infomationinfo
imageimg
lengthlen
librarylib
messagemsg
passwordpwd
positionpos
stringstr
temptmp
——————

省份标识缩写:

安徽,皖: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,团队内要统一协调定义

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

类型后缀前缀描述
ActivityXxxActivity
FragmentXxxFragment
AdapterXxxAdapter
ServiceXxxService
BroadcastReceiverXxxBroadcast
ContentProviderXxxProvider
实体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 控件的 缩写 形式:

全称缩写
buttonbtn
textViewtv
editTextet
radioGrouprg
radioButtonrb
checkboxcb
imageViewiv
listViewlv
recyclerViewrv
————
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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值