android包结构规范,【Android】Android产品-开发规范
前言
为什么需要开发规范?
编码规范对于程序员而言尤为重要,有以下几个原因:
1)一个软件的生命周期中,80%的花费在于维护
2)几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护
3)编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码
4)如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品
开发规范的作用
1)减少维护花费
2)提高可读性
3)加快工作交接
4)减少名字增生
5)降低缺陷引入的机会
##2 命名规范 ###2.1 常量命名规范
####2.1.1 类型 常量命名规范 ####2.1.2 说明 常量用于保存需要常驻内存中并且经常使用变化不多的数据,定义常量的名称的时候需要遵循望文知意的原则; ####2.1.3 规则
全部为大写字母;
中间以“_”连接;
望文知意原则;
####2.1.4 备注 代码中涉及到直接使用某个字符串或者其他基本类型的值时,建议定义成常量,避免多处直接使用同样的值作为参数。
####2.1.5 举例
如:定义一个常量表示最小屏幕宽度的常量,则可以定义一个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 变量命名规范 ####2.2.1 类型 变量命名规范 ####2.2.2 说明 变量用于保存系统中的临时数据,变量命名时遵循望文知意,简单明了,驼峰标示等原则。 ####2.2.3 规则
首字母大写;
java驼峰命名;
望文知意原则;
推荐引用类型变量添加前缀“m”;
如果是View组件变量,则组件名称为xml文件中定义的ID名称去掉下划线,下划线后一位大写;
####2.2.4 备注 无
####2.2.5 举例
如:定义一个表示最小屏幕宽度的变量,则可以定义一个int型的临时变量为: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 方法命名规范
####2.3.1 类型 方法命名规范
####2.3.2 说明 方法名的命名应该遵循简单明了的原则;
####2.3.3 规则
首字母小写;
java驼峰命名;
简单明了原则;
初始化View方法init*(每个init做一件事)
####2.3.4 备注
同时在方法的实现上,尽量不要在一个方法中出现太多实现代码,如一个方法有几百行的实现逻辑,推荐在逻辑复杂时,按功能点拆分出多个方法,便于阅读。
另外,出现功能一样的实现逻辑,尽量抽取公用方法,避免将实现逻辑复制到多个用到的地方。
####2.3.5 举例
如:定义一个获取屏幕宽度的方法,依照上述原则,则可以定义为一个静态方法: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 类命名规范
####2.4.1 类型 类命名规范
####2.4.2 说明 类名主要表示一个类的作用,需要简明扼要,望文知意,并且首字母大写。
####2.4.3 规则
首字母大写;
java驼峰命名;
望文知意原则;
能够说明类的功能和主要作用(注释的作用);
Acitivity类以Acitivity结尾;
Fragment类以Fragment结尾;
Service类以Service结尾;
BroadcastReceiver类以Receiver结尾;
ContentProvider类以Provider结尾;
Application类以Application结尾;
自定义View类以Custom**View结尾;
自定义Adapter类以Adapter结尾;
adapter中的ViewHolder以Holder结尾;
实体Bean以Model结尾;
####2.4.4 备注 无
####2.4.5 举例
如:定义一个获取屏幕信息的工具类,则可以定义为public class ScreenUtils;
例如:public class ScreenUtils; ( √)
例如:public class Screenutils; (×)
例如:public class Screen; (×)
例如:public class screenutils; (×)
例如:public class screen; (×)
例如:public class su;(x)
###2.5 接口命名规范
####2.5.1 类型 接口命名规范
####2.5.2 说明 接口命名需要简单明了,长度不宜过长;
####2.5.3 规则
首字母大写(第二个字母也是大写);
java驼峰命名;
望文知意原则;
建议在名称前面追加“I”;
####2.5.4 备注
I**Listener
I**CallBack
I**;
####2.5.5 举例
如:定义一个activity的方法接口,实现接口中的某些方法:public interface IFunctionListener;
例如:public interface IFunctionListener;( √)
例如:public interface BaseActivity; (×)
例如:public interface Baseactivityinter; (×)
例如:public interface BaseInter; (×)
例如:public interface ActivityInter;(×)
###2.6 包名规范
####2.6.1 类型 包名规范
####2.6.2 说明 用于分类管理类文件;
####2.6.3 规则
所有字母小写;
简单明了,层级很深,没有拼接的包名;
望文知意;
按功能划分包名,如“我的”
工具类可以划分为一个工具类的包名,utils,里面可以添加包名层级;
系统类的可以划分为一个系统类的包,system,里面可以添加包名层级;
组件类的可以划分为一个组件类的包,***,里面添加adapter的包名,自定义view包名;
Service类的可以划分为一个服务类的包,service,里面可以添加包名层级;
数据库相关类可以划分为一个数据库类,db,里面可以添加数据库相关类,Bean类,数据库服务类等;
广播类的可以划分为广播类的包,receiver,可以放一些广播相关的类;
网络类相关的可以划分为,network,放一些网络相关的类;
Fragment类存放在fragment包下;
Activity类存放在Activity包下;
####2.6.4 备注 无
####2.6.5 举例 无
###2.7 目录名称规范
####2.7.1 类型 目录名称规范
####2.7.2 说明 主要是一些jar包,so文件的配置目录名称;
####2.7.3 规则
全部为小写字母;
简单明了;
望文知意;
驼峰表示;
####2.7.4 备注 无
####2.7.5 举例
后期增加目录的可能性不多,现列举出系统中存在的目录结构:
lib:第三方jar的保存路径;
jniLibs:jni引用的so文件的目录;
###2.8 布局文件名称规范
####2.8.1 类型 布局文件名称规范
####2.8.2 说明 主要包含资源文件的命名问题;
####2.8.3 规则
全部为小写字母;
中间以"_"连接;
望文知意原则;
布局文件的开头问类名;
列表项的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文件名称规范
####2.9.1 类型 drawable文件名称命名规范
####2.9.2 说明 主要包含资源文件的命名问题;
####2.9.3 规则
全部为小写字母;
中间以"_"连接;
望文知意原则;
布局文件的开头问类名;
11_22_33_44,44:selector,shape(大概五六个,暂时不定义其他的); 33:src、bg、color(可扩展,可为空); 22:状态名称或者为空;11:业务名称
####2.9.4 备注 无
####2.9.5 举例 无
###2.10 资源ID规范
####2.10.1 类型 资源ID命名规范
####2.10.2 说明 各种资源ID的定义问题;
####2.10.3 规则
全部为小写字母;
中间以"_"连接;
望文知意原则;
####2.10.4 备注 可以考虑按照组件的名称的缩写作为前缀,(同一个xml文件中ID名称不能重复)如:组件简写(大写字母缩写)_业务名称 TextView的组件:tv_pay_money Button的组件:btn_pay_money EditText的组件:et_user_name LinerLayout组件:ll_container
####2.10.5 举例 如:比如一个textview组件,可点击用于支付的按钮,则可以把ID定义为: tv_pay_money;
##3 注释规范
###3.1 类注释 在类、接口定义之前当对其进行注释,包括类、接口的目的、作用、功能、继承于何种父类,实现的接口、实现的算法、使用方法、示例程序等。 /** * author:作者 * time:时间 * desc:描述 */
###3.2 方法注释 方法注释的模板: /** * desc:描述 * @param 参数名 参数描述 * @param 参数名2 参数描述 * @return 返回值类型说明 * @throws Exception 异常说明 */
###3.3 类成员变量和常量注释 成员变量和常量需要使用如下注释的形式,注释位于变量的上侧; /** * **/
###3.4 内部逻辑注释 内部逻辑注释模板: //支付成功 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(); //刷新当前页面 reflush(currentUrl); }
##4 代码顺序
###4.1 代码顺序 在一个典型的Activity中代码的顺序如下: /** * author:sh * desc:该class的作用 * time:yyyy-MM-dd / public class ClassName { //(1) 成员变量集合 //(2) 回调方法集合 若该类为activity,则:onCreate、、onDestory; 若该类为Fragment、则:onCreateView、**、onDestory; //(3) 其他方法集合 }
##5 代码风格
###5.1 大括号换行 左大括号不换行,右大括号换行; class MyClass { int func() { if (something) { // ... } else if (somethingElse) { // ... } else { // ... } } }
###5.2 小括号空格 if (condition) { body(); } // 推荐
###5.3 缩进
4 个空格作为缩进排版的一个单位,不使用制表符 tab。
8 个空格作为换行后的缩进,包括函数调用和赋值。
Instrument i = someLongexpression_r(that, NotFit, on, one, line); // 推荐
###5.4 每一行的长度
尽量避免一行的长度超过 100 个字符。
例外:如果注释行包含了超过 100 个字符的命令示例或者 url 文字,为了便于剪切和复制,其长度可以超过 100 个字符。
例外:import 行可以超过限制,因为很少有人会去阅读它。这也简化了编程工具的写入操作。
###5.5 每次声明一个变量
推荐一行一个声明,因为这样以利于写注释;
int level; // indentation level
int size; // size of table
###5.6 if-else语句 if-else语句应该具有如下格式: if (condition) { statements; }
if (condition) {
statements;
} else {
statements;
}
if (condition) {
statements;
} else if (condition) {
statements;
} else{
statements;
}
注意:if语句总是用”{“和”}“括起来,避免使用如下容易引起错误的格式:
if (condition) // 避免
statement;
###5.7 for语句 一个for语句应该具有如下格式: for (initialization; condition; update) { statements; } 当在for语句的初始化或更新子句中使用逗号时,避免因使用三个以上变量,而导致复杂度提高。 若需要,可以在for循环之前(为初始化子句)或for循环末尾(为更新子句)使用单独的语句。
###5.8 while语句 一个while语句应该具有如下格式: while (condition) { statements; }
###5.9 do-while语句 do { statements; } while (condition);
###5.10 switch语句 一个switch语句应该具有如下格式: switch (condition) { case ABC: statements; /* falls through */ case DEF: statements; break;
case XYZ:
statements;
break;
default:
statements;
break;
}
每当一个case顺着往下执行时(因为没有break语句),通常应在break语句的位置添加注释。
##6 异常规范
###6.1 异常名称 定义异常的时候,异常的后缀名称以Exception结尾,及**Exception;
###6.2 异常描述 尽量英文描述,简单明了;
###6.3 异常格式 一个try-catch语句应该具有如下格式: try { statements; } catch (ExceptionClass e) { statements; }
try {
statements;
} catch (ExceptionClasse) {
statements;
} finally {
statements;
}
##7 其他规范
###7.1 源文件的函数小于2K 一般来说源文件的行数不能大于2K行,过多的话可以考虑拆分功能,拆分函数等;
###7.2 使用TODO注释
对那些临时性的、短期的、够棒但不完美的代码,请使用 TODO 注释。
TODO 注释应该包含全部大写的 TODO,后跟一个冒号:
// 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 在系统中需要打印LOG的时候,尽量使用自定义的LOG,自定义的LOG在开发环境的时候会打印日志,正式环境的时候不会打印日志。
###7.4 使用自定义TAG 在系统打印LOG的时候,使用TAG尽量使用tab,同意的TAG标志。
本文转载自【一片枫叶】
android包结构规范,【Android】Android产品-开发规范相关推荐
- 免费体验|教你用Python掌握企业级产品开发规范要求的能力!
(文末招聘老师↓) 如今,要说哪种编程语言最火,非Python莫属!市面上那些铺天盖地的Python课程,你是不是也挑花了眼? 想要追赶Python的热潮,在编程领域深耕下去,你可能或接触或自学,或是 ...
- php 结构体_【开发规范】PHP编码开发规范下篇:PSR-2编码风格规范
之前的一篇文章是对PSR-1的基本介绍 接下来是PSR-2 编码风格规范,它是 PSR-1 基本代码规范的继承与扩展. PSR-1 和PSR-2是PHP开发中基本的编码规范,大家其实都可以参考学习下, ...
- 阿里 前端 规范_阿里前端开发规范
前端代码规范 Front Standard Guide 前端 JS 项目开发规范 规范的目的是为了编写高质量的代码,让你的团队成员每天得心情都是愉悦的,大家在一起是快乐的. 引自<阿里规约> ...
- java开发规范文档_Java开发规范
随着<阿里巴巴Java开发手册>的公开,重新又掀起一股编码规范的风口.结合<华为java编程规范>以及团队内部的实践,我们也做了一段开发规范.不求最全,但求有效. 里面的规范, ...
- 我们部门的开发规范-《付钱拉开发规范手册》
以下是我们部门的开发规范 前 言 <付钱拉开发规范手册>是付钱拉技术团队对日常项目实战经验的总结,经历付钱拉技术平台多次的技术架构演进和实战总结整理而来,目的是能够帮助团队成员避免走过的 ...
- mysql开发规范最新版本_MYSQL 开发规范
数据库命名规范 所有数据库对象表名必须小写 (mybook_db) 命名要做到见名知意,不能使用mysql保留关键字 临时表 tmp_ 开头,备份表以 bak_ 开头 都以时间戳结尾 所有存储相同数据 ...
- android包内存放视频,Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)...
为其决定了应用程序的开发质量:可用性.流畅性.稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 Android性能优化的详细攻略, 含:优化方向.原因 & 具体优化 ...
- java中dao层命名规范_Dao层 · java开发规范 · 看云
##文件命名 >XXMapper.java 对应xml文件命名为XXMapper.xml ##文件 文件应与数据库中表一一对应,有特殊要求的可以一个表对应多个文件,但严禁一个业务一个文件 ##参 ...
- java 开发规范 下载_java后端开发规范 PDF 下载
一.命名风格 1.[强制]类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO / DTO / VO / AO 正例:MarcoPolo / UserDO / ...
最新文章
- java input 数组_Java基础之:数组
- Linux每次开机都要source /etc/profile的解决方法
- 中国碳纤维风电叶片行业“十四五”发展规划及投资可行性分析报告2022-2028年版
- 大端模式小端模式 主机序网络序
- 带网管工业交换机跟不带网管交换机的差别
- CodeForces 1B
- thinkphp __hash__
- java中的implements如何打开_Java 中extends与implements使用方法
- java将Map转换为List
- 中国最令人崩溃的25个姓氏,排名第1位的,打死都想不到
- php元换成万元,元换算成万元(元与万元的换算器)
- 网络看不到计算机和设备,网络发现已关闭,网络计算机和设备不可见。请启用网络和共享中心中的网络发现。解决方法...
- 东欧小哥打造超全Python速查表登上GitHub热榜,标星4600+
- 轻便提示插件tipTip
- LAMP 技术简介(1)
- day21、3 - 防火墙HA
- 项目实战之旅游网(一)项目介绍 项目搭建
- 面试官问你为什么选择做客服_在线客户服务-您的选择
- 【Barracuda】Barracuda用GMV后处理的使用方法总结(持续更新2020-5-22)
- 100集华为HCIE安全培训视频教材整理 | Agile Controller终端安全管理特性(四)
热门文章
- html5svg在线编辑器,SVG to Canvas在线转换工具
- Redis中使用Lua语言
- SQLServer 联合查询
- ddos源码 ntp_详解 NTP反射型DDos攻击
- 【课题总结】OpenCV 抠图项目实战(6)色彩范围抠图
- springboot test_精益求精!Spring Boot 知识点全面回顾,带你重新细读源码!
- 测试开发——flask视图函数与路由 实战重点
- Windows 下的批处理脚本基础——批处理运算操作(代码可拿)
- pdf.js 文字丢失问题 .cmaps
- 谷歌搜索技巧:搜索语法+隐藏彩蛋+高级设置