转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!



Android开发编码规范

目的及指导原则

目的

统一规范 Eclipse编辑环境下Java的编码风格和标准

指导原则

1)首先是为人编敲代码,其次才是计算机。这是软件开发的基本要点,软件的生命周期贯穿产品的开发、測试、生产、用户使用、版本号升级和后期维护等长期过程,仅仅有易读、易维护的软件代码才具有生命力。

2)保持代码的简单清晰,避免过分的编程技巧。保持代码的简单化是软件project化的基本要求。不要过分追求技巧,否则会减少程序的可读性。

3)编程时首先保证正确性,其次考虑效率。编程首先考虑的是满足正确性、健壮性、可维护性、可移植性等质量因素,最后才考虑程序的效率和资源占用。

4)函数(方法)是为一特定功能而编写,不是万能工具箱。方法是一个处理单元,是有特定功能的,所以应该非常好的规划方法,不能是全部东西都放在一个方法里实现。

5)多加凝视。凝视是为了让人更easy理解代码,而不是为了敷衍。比如 sort函数,凝视写的是“排序”,那么该凝视是无意义的,由于看名字就知道是排序。比如凝视为“希尔排序实现”,则有意义,由于阅读者能知道名字以外很多其它的信息。

适用范围

适用于全部用Java语言开发的项目。

编码规范

文件

1) 项目文件必须使用一个有意义的名字。比如:Eclipse中下拉刷新的view文件被命名为’RefreshLoadingView’。

2)
对于文件的文件夹要按例如以下结构创建:

-包名以下:程序入口

-activity:存放全部Activity,不同模块能够建立子包存放便于区分

-frament:存放全部Frament,不同模块能够建立子包存放便于区分

-service:存放全部service,不同模块能够建立子包存放便于区分

-broadcast:
存放全部broadcast,不同模块能够建立子包存放便于区分

-view:存放全部自己定义控件

-base:存放全部base类及存放全局变量

-utils:存放全部工具类

-adapter:存放全部adapter

-db:存放数据库相关如:model包(db实体), operate包(db操作类)

-http:存放请求类及全部请求实体(dto),callback

关于图片,资源文件等都按android默认存放路径存放

蓝牙,网络请求类,数据库操作基类封装成lib,引用就可以。

凝视

打开eclipse-》Properties->Code Templates->Comments

配置例如以下

Files

/**
* @Title: ${file_name}
* @Package ${package_name}
* @Description: ${todo}(用一句话描写叙述该文件做什么)
* @author 名字
* @date ${date} ${time}
* @version V1.0
*/
Types
/**
* @ClassName: ${type_name}
* @Description: ${todo}(这里用一句话描写叙述这个类的作用)
* @author名字
* @date ${date} ${time}
*
* ${tags}
*/
Fields
/**
* @author 名字
* @date ${date} ${time}
* @Fields ${field} : ${todo}(用一句话描写叙述这个变量表示什么)
*/
Constructors
/**
* <p>Title: </p>
* <p>Description: </p>
* ${tags}
* @author 名字
* @date ${date} ${time}
*/
Methods
/**
* @author 名字
* @date ${date} ${time}
* @Title: ${enclosing_method}
* @Description: ${todo}(这里用一句话描写叙述这种方法的作用)
* @param ${tags} 设定文件
* @return ${return_type} 返回类型
* @throws
*/
Overriding methods
/**
* @author 名字
* @date ${date} ${time}
* <p>Title: ${enclosing_method}</p>
* <p>Description: </p>
* ${tags}
* ${see_to_overridden}
*/
Delegate methods
/**
* @author 名字
* @date ${date} ${time}
* ${tags}
* ${see_to_target}
*/
Getters
/**
* @author 名字
* @date ${date} ${time}
* @return ${bare_field_name}
*/
Setters
/**
* @author 名字
* @date ${date} ${time}
* @param ${param} 要设置的 ${bare_field_name}
*/ 有些重要地方用 // TODO 标明

编码排版格式

可用Eclipse自带格式快捷 shift+command(ctrl)+f

命名规范

方法

1)
方法的名称应所有使用有意义的单词组成,且以小写字母开头,多单词组合时,后面的单词首字母大写。

比如:

getUserInformation……

2)
设置类变量的内容的方法应使用set作为前缀,读取变量的内容的方法应使用get作为前缀。

比如:

getUserName();

setUserName(String username);

3)
方法中的參数:參数名要有意义

比如:

setUserName(String username);

变量

1)
变量必须起有意义的名字,使其它组员能够非常easy读懂变量所代表的意义,变量命名能够採用同义的英文命名,可使用几个英文单词,第一个单词首字母小写,其它单词首字母大写。

比如:

private protected:

mCountChild

public:

局部变量

countChild

2)
对于一些特殊类型的变量,命名时要带上类型,如NSArray 的变量命名为xxxArray,其它的如xxxDictionary,xxxSize等。这样就能够从名称上知道是什么类型的变量。

常量

1)
避免在程序中直接出现常数,使用超过一次的应以常量定义的形式来替代。

2)
常数的宏定义应与它实际使用时的类型相一致。如以3.0来定义浮点类型,用3表示整型。

3)
常量的命名应当可以表达出它的用途,而且用大写字母表示。

比如:

public static final doublePI 3.1415926

4)
一些常量前加特殊前缀,能够作为不同常量的区分,

比如:

UserDefaultsKey的变量前加UDKEY_,

NotificationNameKey前面加NNKEY_,

DictionaryKey前面加DICTKEY_,

1)
全部的类名,接口名均以大写字母开头,多单词组合时,后面的单词首字母大写。类,接口名必须是有意义的。

2) 继承自UIView的类以View结尾。

比如:

OperatorUsersInfomationView,LabelView等。

3) 继承自ViewController的类以viewController结尾。

比如:

HomePageViewController,LoginViewController等。其它类推。

4)
全部保存数据的实体以Model结尾。

比如:

UserModel,

抽象类:

以Abstract开头

例:AbstractDataManager

接口:

以I开头

例:IDataManager

控件专用前缀规范

控件名前缀

Button/ImageButton
btn

toggleButton
tb

TextView tv

CheckBox cb

EditText et

GridView gv

ListView lv

VideoView vv

ScrollView scv

ImageView img

xml文件的控件id命名规则:

控件专用前缀+英文名称(每一个单词首字母大写)

英文名称在能反映出该控件的大致用途的前提下尽量简短。

比如:

加入短信模板的buttonid可命名为:

btnAddSmsContent

相应java代码中的局部变量可命名为:

btnAddSmsContent

相应java代码中的类字段可命名为:

private protected:

mBtnAddSmsContent

public:

_btnAddSmsContent

显示短信模板的ListView id可命名为:

lvSmsContent

相应java代码中的局部变量可命名为:

lvSmsContent

相应java代码中的类字段可命名为:

private protected:

mLvSmsContent

public:

_lvSmsContent

改动规范

新增代码行

新增代码行的前后应有凝视行说明。

//改动人,改动时间,改动说明

新增代码行

//改动结束

删除代码行

删除代码向的前后用凝视行说明

//改动人,改动时间,改动说明

要删除的代码行(将要删除的语句进行凝视)

//改动结束

改动代码行

改动代码行以凝视旧代码行后再新增代码行的方式进行。

//改动人,改动时间,改动说明

//改动前代码行開始

//改动前代码行

//改动前代码行结束

//改动后代码行開始

改动后代码行

//改动结束

错误处理规范

1)对全部的实体类及其属性的使用要做非空检查,避免使用空对象引起的错误;

2)对数组进行越界检查;

3)全部有返回值的函数必须首先在函数開始指定默认值;

4)通用函数、方法以及详细业务实现代码中必须加 try…catch错误扑捉处理;

代码管理规范

1)统一使用SVN进行代码管理

2)严格控制commit次数,仅仅有在关键代码或者模块完整功能所有实现、下班前才干做代码commit;

3)代码commit必需要写明变更记录;

4) 代码提交之前必须CheckStyle,而且解决CheckStyle警告后才干提交;

CheckStyle

1. Checkstyle是在软件开发中的一种静态代码分析工具,用来检查Java源码是否符合编码规则。

2.配置CheckStylehttp://www.cnblogs.com/lanxuezaipiao/p/3202169.html

3.配置CheckStyle文件配置文件到(中文提示版)CheckStyle.xml

配置方法http://chenzhou123520.iteye.com/blog/1627618

4.使用CheckStyle

ym——Android开发编码规范(自用)的更多相关文章

  1. Android开发编码规范(自用)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!   Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境 ...

  2. 【安全开发】Android安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

  3. Android开发代码规范(转)

    Android开发代码规范 1.命名基本原则    在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的.比如,大小写的区分,使用不同字母开头等等.但究其本,追其源,在为一个资源其名称 ...

  4. 你不可不看的Android开发命名规范

    标识符命名法最要有四种: Camel(骆驼)命名法:除首单词外,其余所有单词的第一个字母大写,如:fooBar; Pascal命名法:所有单词的第一个字母大写,如:FooBar: 下划线命名法:单词与 ...

  5. Android的编码规范

    一.Android编码规范 1.学会使用string.xml文件 在我看来,当一个文本信息出现的次数大于一次的时候就必须要使用string.xml 比如一个保存按钮 , 不规范写法: <Butt ...

  6. 【转】android 开发 命名规范

    原文网址:http://www.cnblogs.com/ycxyyzw/p/4103284.html 标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外, ...

  7. 【转载】Android 开发 命名规范

    原文地址:http://www.cnblogs.com/ycxyyzw/p/4103284.html 标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外, ...

  8. android 开发 命名规范

    标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写. 2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字 ...

  9. Android 开发 命名规范(基础回顾)

    标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写. 2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字 ...

随机推荐

  1. Java的LockSupport.park()实现分析

    LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了主要的线程同步原语.LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,仅仅有两个函数: ...

  2. [置顶] 程序员面试之道(《程序员面试笔试宝典》)之看着别人手拿大把的offer,不淡定了怎么办?

    不管是在哪里,不管发生什么事,不要随便放下自己. ——<当男人恋爱时> 很多求职者都会面临一个问题:别人手拿大把大把的offer了,而自己却是两手空空,别人签约之后已经过着“猪狗不如”的悠 ...

  3. 用SignalR做类似QQ登录的应用

    原文:用SignalR做类似QQ登录的应用 首先通过NuGet下载signalr包 在工程下新建一个类,继承Hub public class DemoHub:Hub { public class Us ...

  4. 程序员必须知道的几个Git代码托管平台(转)

    上一篇博客中2015继续任性——不会Git命令,照样玩转Git我们简单的介绍了在VS2013中使用Git,和GitHub客户端的使用.那么使用Git到底有什么好处呢?最为明显的是支持Git代码托管的平 ...

  5. Oracle判断指定列是否全部为数字

    select nvl2(translate(name,'\1234567890 ', '\'),'is   characters ','is   number ') from customer_inf ...

  6. Shell 文件包含

    和其他语言一样,Shell 也可以包含外部脚本.这样可以很方便的封装一些公用的代码作为一个独立的文件. Shell 文件包含的语法格式如下: . filename # 注意点号(.)和文件名中间有一空 ...

  7. 用asio的定时器实现带超时的connect,备忘

    // test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <boost/asio.hpp> #inclu ...

  8. WinExec函数,启动其他应用程序

    WinExec The WinExec function runs the specified application. Note  This function is provided only fo ...

  9. Android中 Bitmap Drawable Paint的获取、转换以及使用

    比如Drawable中有一系列连续的图片,img_0.png, img_1.png, img_2.png ... 如果要动态获取这些图片,通过"R.drawable.img_x"的 ...

  10. Oracle实用-01:绑定变量

    数据库虽然在学校系统学习过,但是在工作中真正使用起来收获又是不一样的,今天起打算将项目中使用到的技术再分享出来,不以书本的顺序,只从碰到的问题为顺序. 虽然不是纯粹的数据库工程师,但是每个程序员总免不 ...