Android 编码规范

背景

公司项目开始时间较早,之前开发时候没有具体的代码规范,历经多次人员更替之后,现在的项目代码显得有一些紊乱,所以我打算制定代码规范标准,所有人按照规范编码,提高代码质量,提升代码的可读性,便于后期的代码维护。

制定规范

一、开发环境

开发工具:Android Studio
编码格式:UTF-8

二、命名规范

1.资源命名

要求:分类明确,取名直观,防止重复
命名组成:小写字母+数字+下划线

类型命名规范举例备注
drawable类型_属性_btn_back_click / shape_r15_33333 / shape_r15_b1_33333
mipmap类型_功能_属性ic_message_white / bg_dialog_header
anim类型_功能_属性anim_activity_in / anim_dialog_out
string模块名_page名_功能mine_userinfo_usename
colorcolor_具体色值 / color_具体色值_al透明度color_333333 / color_333333_a50基本只有这两种
stylestyle_功能_属性描述style_text_12_33333
layout分类_page_功能activity_main / fragment_mine / item_setting_userinfo / layout_titlebar必须以明确分类为开头
viewIdview缩写_功能tv_title / btn_click

viewId开头规范

View类型开头举例
FrameLayoutflfl_main_user
LinearLayoutllll_main_user
RelativeLayoutrlrl_setting_phone
TextViewtvtv_title
EditTextViewetvetv_phone
Buttonbtnbtn_back
ImageViewiviv_menu
RecyclerViewrvrv_main
CheckBoxcbcb_gender
ScrollViewsvsv_main
SmartRefreshLayoutsrlsrl_mine

2.包命名

命名规则:一个唯一包名的前缀总是全部小写的 ASCII字母并且是一个顶级域名,通常是com。
例如com.cmcc.xxx
规约:包命名必须以com. cmcc开始,后面跟项目名称cmcc.XXX(或者缩写),再后面为模块名或层级名称。
如:com.cmcc.项目缩写.模块名→com.cmcc.base
如:com.cmcc.项目缩写.模块名→com.cmcc.view

3.方法命名

遵循小驼峰规则,且取名必须与方法功能相符

类型命名规范举例备注
void按功能,有实际意义initViews / getUserInfo / setValuesToViews

4.类命名

要求:大驼峰,有实际意义
包括:class、interface、enum

类型命名规范举例备注
基类按功能,有实际意义BaseActiivty / BaseFragment / BaseHoder / BaseData / BaseItem
组件、页面类功能+页面类型MyApplication / MainActivity / DiscoveroyFragment / DeviceHolder / HomePageAdapter
功能类按功能,有实际意义RecyclerItemClickListener / TextViewUtils / ActivityManager / PageValueTypeEnum
自定义View按照控件实际功能命名MyViewPager / CountDownTextView / CameraView / TitleBarView

5.变量

类型举例备注
临时变量i,j,k,l,m,n,o应用在for循环中居多
其他变量mContent / pageType / loginDeviceName遵循小驼峰规则

6.常量

大写并用下划线分隔

举例
PACKAGE_NANE
SP_KEY_USER_NAME
SP_KEY_USER_GENDER
PAGE_TYPE_HOME
PAGE_TYPE_MINE
PAGE_TYPE_TITLE

二、编码规范

1.XML布局中尽量减少层级。
2.布局控件数量大于10个时,使用ConstraintLayout,否则使用其他Layout,考虑使用优先级:FrameLayout>LinearLayout>RelativeLayout>其他。
RecyclerViewHolder的布局文件中,不要使用ConstraintLayout。
3.布局文件中,TextView的text属性,禁止直接写死字符串,必须添加@string引用
// 4.使用AppCompatXXXView代替XXXView(暂不做要求)
5.同属性超过4个时,需要使用style
6.及时删除多余import及代码格式化,每次编码完成后习惯性Ctrl+Alt+O,Ctrl+Alt+L
7.每个方法总行数不能超过80行
8.单行代码长度不能超过一屏幕(160字符),若过长需及时换行
9.if语句必须添加大括号,即使逻辑只有一行代码,也需要,例如:

if(needRefresh){
	refresh();
}

10.非空判断,使用NullUtils.isNotNull(XX);
11.禁止使用strinng.equals(string),字符串比较使用TextUtils.equals(string1,string2);
12.禁止直接使用TextView.setText();,TextView设置字符串使用TextViewUtils.setText(tv, str);
13.禁止在自定义View的onDraw方法里创建新对象
14.禁止在RecyclerViewHolder的onBindView中创建新对象
15.禁止在size超过10的for循环中创建新对象
16.弃用或不推荐方法,及时添加@Deprecated注解,如有新方法代替,请在注解中添加{@link XXX}
17.数据类型,不要直接使用int,须定义枚举
18.遇到需要使用HashMap的地方,使用ArrayMap代替
19.代码中遇到字符串拼接,禁止直接写死字符串,必须使用Resource.getString(R.string.str);
20.布局文件中,所有的宽高、字体大小必须引用@deimen

android:layout_width="@dimen/x100'
android:textSize="@dimen/x16"

21.单行TextView,必须设置minHeight
22.多行TextView,必须设置行间距,引用@style/base_module_text_line_spacing_multiplier
23.提交代码中不能包含原生的Log打印,日志打印使用已封装的MyLog

三、注释规范

一眼就能看出实际意义的方法不需要添加注释,例如:在findViewById(int viewId)
提测代码原则上不包含TODO注释(延期需求除外)

1.类注释:

必须添加创建人署名和联系方式

/**
 * @author 创建人: XXX
 * @mobile 联系电话:199999999XX
 * @email 邮箱:199999999XX@163.com
 * @createTime 创建时间: 2022/6/28
 * @describe 描述:APP主界面
 */
 public class MainActivity {
 }

可在studio中添加设置

2.方法注释:

必须包含方法用途
必须申明每一个参数变量的意义

/**
 * 获取在线设备名称
 * 
 * @param deviceList 设备列表
 * @param position 下标
 * @return 设备名称
 */
private String getOnlineDeviceName(ArrayList<DeviceInfo> deviceList, int position){
	... // 其他逻辑
	return deviceList.get(position).name;
}

方法定义完成后,可通过AS的代码提示直接生成,生成后完善即可。

2.变量注释:

必须使用文档注释

/** 是否启动自动进入 */
public static final String IS_CHANGE_FROM_START = "is_change_from_start";

 /**
 * 是否启动自动进入
 */
public static final String IS_CHANGE_FROM_START = "is_change_from_start";

3.区块注释:

使用单行注释或多行注释

private void run(){
 // 单行注释
	xxx();
}
private void run(){
	/*
	 * 多行注释
	 * /
	 xxx();
 }

四、代码提交规范

1.未经测试的代码,禁止提交,确保提交的代码不影响其他人正常开发流程
2.代码提交之前,必须先fetch并rebase,合并至最新代码后再push
3.提交 commit 规范为:

[需求] 需求名称以及内容
[集成] 变动SDK名称
[优化] 优化功能点
[修复] 修复bug内容

五、其他须遵循的JAVA规范

1.代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
2.代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
3.杜绝不规范的英文缩写:AbstractClass 缩写成AbsClass;condition缩写成condi;此类随意缩写严重降低了代码的可阅读性。
4.关于Service或Dao层的命名
插入:insert(推荐)或save
删除:delete
修改:update(推荐)或modify
查询单个对象:get
查询多个对象:list
5.避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。

END

参考

https://blog.csdn.net/Android_XG/article/details/121784873

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值