Skip to content

Commit bb04325

Browse files
author
Blankj
committed
modify some
1 parent c63c68f commit bb04325

File tree

1 file changed

+72
-69
lines changed

1 file changed

+72
-69
lines changed

README.md

100644100755
Lines changed: 72 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,43 @@
22

33
## 摘要
44

5-
* [前言](#前言)
6-
* [AS规范](#AS规范)
7-
* [命名规范](#命名规范)
8-
* [资源文件规范](#资源文件规范)
9-
* [版本统一规范](#版本统一规范)
10-
* [第三方库规范](#第三方库规范)
11-
* [注释规范](#注释规范)
12-
* [测试规范](#测试规范)
13-
* [RN规范](#RN规范)
14-
* [其他的一些规范](#其他的一些规范)
5+
* [1 前言](#1 前言)
6+
* [2 AS规范](#2 AS规范)
7+
* [3 命名规范](#3 命名规范)
8+
* [4 资源文件规范](#4 资源文件规范)
9+
* [5 版本统一规范](#5 版本统一规范)
10+
* [6 第三方库规范](#6 第三方库规范)
11+
* [7 注释规范](#7 注释规范)
12+
* [8 测试规范](#8 测试规范)
13+
* [9 RN规范](#9 RN规范)
14+
* [10 其他的一些规范](#10 其他的一些规范)
1515

1616

17-
### 前言
17+
### 1 前言
1818

1919
为了利于项目维护以及规范开发,促进成员之间Code Review的效率,故提出以下开发规范,如有更好建议,欢迎到GitHub提issue,原文地址: [安卓开发规范(updating)][安卓开发规范(updating)]
2020

2121

22-
### AS规范
22+
### 2 AS规范
2323

2424
工欲善其事,必先利其器。
2525

2626
1. 尽量使用最新版的IDE进行开发;
2727
2. 编码格式统一为**UTF-8**
28-
3. 编辑完.java、.xml等文件后一定要**格式化**(缩进对齐与AS默认一致即可);
28+
3. 编辑完`.java`, `.xml`等文件后一定要**格式化**(缩进对齐与AS默认一致即可);
2929
4. 删除多余的import,减少警告出现,可利用AS的`Optimize Imports`快捷键;
3030
5. AS常用开发插件可以参考这里~[AS常用开发插件][AS常用开发插件]
3131

3232

33-
### 命名规范
33+
### 3 命名规范
3434

35-
#### 1. 包名
35+
代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。但 `alibaba`, `taobao`, `youku`, `hangzhou` 等国际通用的名称,可视同英文。
36+
37+
#### 3.1 包名
3638

3739
包名全部小写,连续的单词只是简单地连接起来,不使用下划线。
3840

39-
采用反域名命名规则,全部使用小写字母。一级包名是顶级域名,通常为com, edu, gov, net, org等,二级包名为公司名,三级包名根据应用进行命名,四级包名为模块名或层级名。
41+
采用反域名命名规则,全部使用小写字母。一级包名是顶级域名,通常为`com`, `edu`, `gov`, `net`, `org`,二级包名为公司名,三级包名根据应用进行命名,四级包名为模块名或层级名。
4042

4143
| 包名 | 此包中包含 |
4244
| :--------------------------------------- | :----------------------------- |
@@ -52,30 +54,30 @@
5254
| com.xx.应用名称缩写.view (或者 com.xx.应用名称缩写.widget ) | 自定义的View类等 |
5355
| com.xx.应用名称缩写.service | Service服务 |
5456
| com.xx.应用名称缩写.receiver | BroadcastReceiver服务 |
55-
| com.xx.应用名称缩写.confing | 所有的配置相关的类 |
57+
| com.xx.应用名称缩写.config | 所有的配置相关的类 |
5658

57-
> 注意:如果项目采用MVP,所有M、V、P抽取出来的接口都放置在相应模块的i包下,所有的实现都放置在相应模块的impl下
59+
> 注意:如果项目采用MVP,所有M、V、P抽取出来的接口都放置在相应模块的i包下,所有的实现都放置在相应模块的impl下
5860
5961

60-
#### 2. 类名
62+
#### 3.2 类名
6163

6264
类名都以`UpperCamelCase`风格编写。
6365

6466
类名通常是名词或名词短语,接口名称有时可能是形容词或形容词短语。现在还没有特定的规则或行之有效的约定来命名注解类型。
6567

6668
名词,采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的, 比如HTML,URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。
6769

68-
|| 描述 | 例如 |
69-
| :-------------- | :--------------------------------------- | :--------------------------------------- |
70-
| Activity 类 | Activity为后缀标识 | 欢迎页面类WelcomeActivity |
71-
| Adapter类 | Adapter 为后缀标识 | 新闻详情适配器 NewDetailAdapter |
72-
| 解析类 | Parser为后缀标识 | 首页解析类HomePosterParser |
73-
| 工具方法类 | Utils或Manager为后缀标识(与系统或第三方的Utils区分)或功能+Utils | 线程池管理类:ThreadPoolManager日志工具类:LogUtils(Logger也可)打印工具类:PrinterUtils |
74-
| 数据库类 | 以DBHelper后缀标识 | 新闻数据库:NewDBHelper |
75-
| Service类 | 以Service为后缀标识 | 时间服务TimeServiceBroadcast |
76-
| Receiver类 | 以Receiver为后缀标识 | 推送接收JPushReceiver |
77-
| ContentProvider | 以Provider为后缀标识 | |
78-
| 自定义的共享基础类 | 以Base开头 | BaseActivity,BaseFragment |
70+
| | 描述 | 例如 |
71+
| :----------------- | :--------------------------------------- | :--------------------------------------- |
72+
| Activity 类 | Activity为后缀标识 | 欢迎页面类WelcomeActivity |
73+
| Adapter类 | Adapter 为后缀标识 | 新闻详情适配器 NewDetailAdapter |
74+
| 解析类 | Parser为后缀标识 | 首页解析类HomePosterParser |
75+
| 工具方法类 | Utils或Manager为后缀标识(与系统或第三方的Utils区分)或功能+Utils | 线程池管理类:ThreadPoolManager日志工具类:LogUtils(Logger也可)打印工具类:PrinterUtils |
76+
| 数据库类 | 以DBHelper后缀标识 | 新闻数据库:NewDBHelper |
77+
| Service类 | 以Service为后缀标识 | 时间服务TimeService |
78+
| BroadcastReceiver类 | 以Receiver为后缀标识 | 推送接收JPushReceiver |
79+
| ContentProvider类 | 以Provider为后缀标识 | ShareProvider |
80+
| 自定义的共享基础类 | 以Base开头 | BaseActivity,BaseFragment |
7981

8082
测试类的命名以它要测试的类的名称开始,以Test结束。例如:HashTest 或 HashIntegrationTest。
8183

@@ -85,7 +87,7 @@ interface Runnable , interface Accessible。
8587
> 注意:如果项目采用MVP,所有Model、View、Presenter的接口都以I为前缀,不加后缀,其他的接口采用上述命名规则。
8688
8789

88-
#### 3. 方法名
90+
#### 3.3 方法名
8991

9092
方法名都以`lowerCamelCase`风格编写。
9193

@@ -104,9 +106,9 @@ interface Runnable , interface Accessible。
104106
| resetXX() | 重置数据 |
105107
| clearXX() | 清除数据 |
106108
| removeXX() | 移除数据或者视图等,如removeView(); |
107-
| drawXXX() | 绘制数据或效果相关的,使用draw前缀标识 |
109+
| drawXX() | 绘制数据或效果相关的,使用draw前缀标识 |
108110

109-
#### 4. 常量名
111+
#### 3.4 常量名
110112

111113
常量名命名模式为`CONSTANT_CASE`,全部字母大写,用下划线分隔单词。那,到底什么算是一个常量?
112114

@@ -119,6 +121,7 @@ static final ImmutableListNAMES = ImmutableList.of("Ed", "Ann");
119121
static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable
120122
static final SomeMutableType[] EMPTY_ARRAY = {};
121123
enum SomeEnum { ENUM_CONSTANT }
124+
122125
// Not constants
123126
static String nonFinal = "non-final";
124127
final String nonStatic = "non-static";
@@ -129,7 +132,7 @@ static final String[] nonEmptyArray = {"these", "can", "change"};
129132
```
130133

131134

132-
#### 5. 非常量字段名
135+
#### 3.5 非常量字段名
133136

134137
非常量字段名以`lowerCamelCase`风格的基础上改造为如下风格:基本结构为`scopeVariableNameType`
135138

@@ -186,13 +189,13 @@ public class MyClass {
186189
> 注意:所有的VO(值对象)统一采用标准的lowerCamelCase风格编写,所有的DTO(数据传输对象)就按照接口文档中定义的字段名编写。
187190
188191

189-
#### 6. 参数名
192+
#### 3.6 参数名
190193

191194
参数名以`lowerCamelCase`风格编写。
192195
参数应该避免用单个字符命名。
193196

194197

195-
#### 7. 局部变量名
198+
#### 3.7 局部变量名
196199

197200
局部变量名以`lowerCamelCase`风格编写,比起其它类型的名称,局部变量名可以有更为宽松的缩写。
198201

@@ -201,30 +204,30 @@ public class MyClass {
201204
即使局部变量是final和不可改变的,也不应该把它示为常量,自然也不能用常量的规则去命名它。
202205

203206

204-
#### 8. 临时变量
207+
#### 3.8 临时变量
205208

206209
临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型。 如: for (int i = 0; i < len ; i++)。
207210

208211

209-
#### 9. 类型变量名
212+
#### 3.9 类型变量名
210213

211214
类型变量可用以下两种风格之一进行命名:
212215

213216
单个的大写字母,后面可以跟一个数字(如:E, T, X, T2)。
214217

215-
以类命名方式(参考2. 类名),后面加个大写的T(如:RequestT, FooBarT)。
218+
以类命名方式(参考3.2 类名),后面加个大写的T(如:RequestT, FooBarT)。
216219

217220

218221
更多还可参考~[阿里巴巴Java开发手册][阿里巴巴Java开发手册]
219222

220223

221-
### 资源文件规范
224+
### 4 资源文件规范
222225

223-
#### 1. 资源布局文件(XML文件(layout布局文件))
226+
#### 4.1 资源布局文件(XML文件(layout布局文件))
224227

225228
全部小写,采用下划线命名法
226229

227-
##### 1) contentview 命名
230+
##### 4.1.1 contentView 命名
228231

229232
必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。
230233

@@ -235,22 +238,22 @@ public class MyClass {
235238
例如:`activity_main.xml`
236239

237240

238-
##### 2) Dialog命名:`dialog_描述.xml`
241+
##### 4.1.2 Dialog命名:`dialog_描述.xml`
239242

240243
例如:`dialog_hint.xml`
241244

242245

243-
##### 3) PopupWindow命名:`ppw_描述.xml`
246+
##### 4.1.3 PopupWindow命名:`ppw_描述.xml`
244247

245248
例如:`ppw_info.xml`
246249

247250

248-
##### 4) 列表项命名:`item_描述.xml`
251+
##### 4.1.4 列表项命名:`item_描述.xml`
249252

250253
例如:`item_city.xml`
251254

252255

253-
##### 5) 包含项命名:`模块_(位置)描述.xml`
256+
##### 4.1.5 包含项命名:`模块_(位置)描述.xml`
254257

255258
例如:`activity_main_head.xml``activity_main_bottom.xml`
256259

@@ -259,7 +262,7 @@ public class MyClass {
259262
例如:`xxxx_title.xml`
260263

261264

262-
#### 2. 资源文件(图片drawable文件夹下)
265+
#### 4.2 资源文件(图片drawable文件夹下)
263266

264267
全部小写,采用下划线命名法,加前缀区分
265268

@@ -316,7 +319,7 @@ public class MyClass {
316319
> 注意:使用AndroidStudio的插件SelectorChapek可以快速生成selector,前提是命名要规范。
317320
318321

319-
#### 3. 动画文件(anim文件夹下)
322+
#### 4.3 动画文件(anim文件夹下)
320323

321324
全部小写,采用下划线命名法,加前缀区分。
322325

@@ -347,13 +350,13 @@ public class MyClass {
347350
| `shrink_to_middle` | 中间缩小 |
348351

349352

350-
#### 4. values中name命名
353+
#### 4.4 values中name命名
351354

352-
##### 1) colors.xml
355+
##### 4.4.1 colors.xml
353356

354357
colors的name命名使用下划线命名法,在你的`colors.xml`文件中应该只是映射颜色的名称一个ARGB值,而没有其它的。不要使用它为不同的按钮来定义ARGB值。
355358

356-
*不要这样做*
359+
**不要这样做**
357360

358361
``` xml
359362
<resources>
@@ -367,9 +370,9 @@ colors的name命名使用下划线命名法,在你的`colors.xml`文件中应
367370
<color name="comment_shadow">#323232</color>
368371
```
369372

370-
使用这种格式,你会非常容易的开始重复定义RGBA值,这使如果需要改变基本色变的很复杂。同时,这些定义是跟一些环境关联起来的,如`button`或者`comment`, 应该放到一个按钮风格中,而不是在`color.xml`文件中。
373+
使用这种格式,你会非常容易的开始重复定义ARGB值,这使如果需要改变基本色变的很复杂。同时,这些定义是跟一些环境关联起来的,如`button`或者`comment`, 应该放到一个按钮风格中,而不是在`color.xml`文件中。
371374

372-
相反,这样做:
375+
**相反,这样做**
373376

374377
``` xml
375378
<resources>
@@ -393,7 +396,7 @@ colors的name命名使用下划线命名法,在你的`colors.xml`文件中应
393396
向应用设计者那里要这个调色板,名称不需要跟"green", "blue", 等等相同。 "brand_primary", "brand_secondary", "brand_negative" 这样的名字也是完全可以接受的。 像这样规范的颜色很容易修改或重构,会使应用一共使用了多少种不同的颜色变得非常清晰。 通常一个具有审美价值的UI来说,减少使用颜色的种类是非常重要的。
394397

395398

396-
##### 2) dimens.xml
399+
##### 4.4.2 dimens.xml
397400

398401
像对待colors.xml一样对待dimens.xml文件 与定义颜色调色板一样,你同时也应该定义一个空隙间隔和字体大小的“调色板”。 一个好的例子,如下所示:
399402

@@ -425,7 +428,7 @@ colors的name命名使用下划线命名法,在你的`colors.xml`文件中应
425428
布局时在写 margins 和 paddings 时,你应该使用spacing_xxxx尺寸格式来布局,而不是像对待String字符串一样直接写值。 这样写会非常有感觉,会使组织和改变风格或布局是非常容易。
426429

427430

428-
##### 3) strings.xml
431+
##### 4.4.3 strings.xml
429432

430433
strings的name命名使用下划线命名法,采用以下规则:模块名+逻辑名称
431434

@@ -440,7 +443,7 @@ strings的name命名使用下划线命名法,采用以下规则:模块名+
440443
`loading` 加载文字
441444

442445

443-
##### 4) styles.xml
446+
##### 4.4.4 styles.xml
444447

445448
几乎每个项目都需要适当的使用style文件,因为对于一个视图来说有一个重复的外观是很常见的,将所有的外观细节属性(colors, padding, font)放在style文件中。 在应用中对于大多数文本内容,最起码你应该有一个通用的style文件,例如:
446449

@@ -467,7 +470,7 @@ strings的name命名使用下划线命名法,采用以下规则:模块名+
467470
**将一个大的style文件分割成多个文件**, 你可以有多个`styles.xml` 文件。Android SDK支持其它文件,`styles`这个文件名称并没有作用,起作用的是在文件 里xml的`<style>`标签。因此你可以有多个style文件`styles.xml`,`style_home.xml`,`style_item_details.xml`,`styles_forms.xml`。 不同于资源文件路径需要为系统构建起的有意义,在`res/values`目录下的文件可以任意命名。
468471

469472

470-
#### 5. layout中的id命名
473+
#### 4.5 layout中的id命名
471474

472475
命名模式为:`view缩写_模块名_逻辑名`,比如btn_main_search
473476
使用 AndroidStudio 的插件 ButterKnife Zelezny,生成注解非常方便,或者也可以使用Android Code Generator插件。
@@ -476,14 +479,14 @@ strings的name命名使用下划线命名法,采用以下规则:模块名+
476479
如果想对资源文件进行分包可以参考我这篇文章~[Android Studio下对资源进行分包][Android Studio下对资源进行分包]
477480

478481

479-
### 版本统一规范
482+
### 5 版本统一规范
480483

481484
Android开发存在着众多版本的不同,比如compileSdkVersion、minSdkVersion、targetSdkVersion以及项目中依赖第三方库的版本,不同的module及不同的开发人员都有不同的版本,所以需要一个统一版本规范的文件。
482485

483486
具体可以参考我写的这篇博文~[Android开发之版本统一规范][Android开发之版本统一规范]
484487

485488

486-
### 第三方库规范
489+
### 6 第三方库规范
487490

488491
别再闭门造车了,用用最新最火的技术吧,安利一波~[Android 流行框架查速表][Android 流行框架查速表],顺便带上自己的干货~[Android开发人员不得不收集的代码][Android开发人员不得不收集的代码]
489492

@@ -492,11 +495,11 @@ Android开发存在着众多版本的不同,比如compileSdkVersion、minSdkVe
492495
个人推荐team使用Retrofit, RxAndroid, OkHttp, Glide/Fresco, Gson/Fastjson, EventBus/AndroidEventBus, GreenDao,(Dagger2, Tinker)。
493496

494497

495-
### 注释规范
498+
### 7 注释规范
496499

497500
为了让他人可以容易看懂你的代码,请在关键地方做好注释。
498501

499-
#### 1. 类注释
502+
#### 7.1 类注释
500503

501504
每个类完成后应该有作者姓名和联系方式的注释,对自己的代码负责。
502505

@@ -510,6 +513,9 @@ Android开发存在着众多版本的不同,比如compileSdkVersion、minSdkVe
510513
* version: 1.0
511514
* </pre>
512515
*/
516+
public class WelcomeActivity {
517+
...
518+
}
513519
```
514520

515521
具体可以在AS中自己配制,Setting → Editor → File and Code Templates → Includes → File Header,输入
@@ -524,15 +530,12 @@ Android开发存在着众多版本的不同,比如compileSdkVersion、minSdkVe
524530
* version: 1.0
525531
* </pre>
526532
*/
527-
public class WelcomeActivity {
528-
...
529-
}
530533
```
531534

532535
这样便可在每次新建类的时候自动加上该注释。
533536

534537

535-
#### 2. 方法注释
538+
#### 7.2 方法注释
536539

537540
每一个成员方法(包括自定义成员方法、覆盖方法、属性方法)的方法头都必须做方法头注释,在方法前一行输入/\*\*回车,AS便会帮你生成模板,我们只需要补全参数即可,如下所示。
538541

@@ -552,7 +555,7 @@ public static byte[] bitmap2Bytes(Bitmap bitmap, CompressFormat format) {
552555
}
553556
```
554557

555-
#### 3. 块注释
558+
#### 7.3 块注释
556559

557560
块注释与其周围的代码在同一缩进级别。它们可以是`/* ... */`风格,也可以是`// ...`风格(**// 后最好带一个空格**)。对于多行的`/* ... */`注释,后续行必须从`*`开始, 并且与前一行的`*`对齐。以下示例注释都是OK的。
558561

@@ -567,19 +570,19 @@ public static byte[] bitmap2Bytes(Bitmap bitmap, CompressFormat format) {
567570
> Tip:在写多行注释时,如果你希望在必要时能重新换行(即注释像段落风格一样),那么使用/\* ... \*/。
568571
569572

570-
### 测试规范
573+
### 8 测试规范
571574

572575
业务开发完成之后,开发人员做单元测试,单元测试完成之后,保证单元测试全部通过同时单元测试代码覆盖率达到一定程度(这个需要开发和测试约定,理论上越高越好),开发提测。
573576

574577
// TODO...
575578

576579

577-
### RN规范
580+
### 9 RN规范
578581

579582
// TODO...
580583

581584

582-
### 其他的一些规范
585+
### 10 其他的一些规范
583586

584587
1. 合理布局,有效运用`<merge>`, `<ViewStub>`, `<include>`标签
585588
2. 相关联的方法尽量放在一起

0 commit comments

Comments
 (0)