|
2 | 2 |
|
3 | 3 | * 码云地址:[Gitee](https://gitee.com/getActivity/AndroidCodeStandard)
|
4 | 4 |
|
| 5 | +* 鸿洋力推:[荐一份 Android 代码规范建议文档](https://mp.weixin.qq.com/s/Zv1zVom69RFrMJ1q8tP8Lw) |
| 6 | + |
5 | 7 | * 做开源几年了,被很多人夸过,你的代码写得比较规范,[甚至有人质疑自己代码的写法](https://github.com/getActivity/AndroidProject/issues/55),但是迟迟没有出一个代码规范,说来惭愧,只是因为我早几年写的代码还不够规范,不敢出来误导大家,而代码规范是后续才慢慢养成的,在这个过程中,我不仅参考了大公司出的代码规范文档,也研究了很多关于谷歌源码的编码规范,同时我也在无时不刻在思考,如何能写出让别人更好理解的代码,自打入行以来,我就在一直在这个问题上面探索。
|
6 | 8 |
|
7 | 9 | * 为什么要做成一个开源项目?因为项目会长期更新,大家如果对里面一些规范表示不能理解的或者感觉写得不太对的,又或者有什么想要补充的,随时欢迎你通过 **[issue](https://github.com/getActivity/AndroidCodeStandard/issues/new)** 反馈给我,大家的建议很重要,是我做好这件事的关键,我会认真对待和思考提出的每一个建议。同时我也相信一份好的代码规范经得住大众的反复推敲和不断实践,在这里也欢迎你提出自己的想法和建议。
|
|
94 | 96 |
|
95 | 97 | * [资源硬编码规范](#资源硬编码规范)
|
96 | 98 |
|
| 99 | +* [版本命名规范](#版本命名规范) |
| 100 | + |
97 | 101 | * [致谢](#致谢)
|
98 | 102 |
|
99 | 103 | #### 前言
|
@@ -338,7 +342,7 @@ HomeAdapter.java
|
338 | 342 | AddressDialog.java
|
339 | 343 | ```
|
340 | 344 |
|
341 |
| -* 技术模块:请以类的 **作用** 来命名,例如:例如 |
| 345 | +* 技术模块:请以类的 **作用** 来命名,例如: |
342 | 346 |
|
343 | 347 | ```text
|
344 | 348 | CrashHandler.java
|
@@ -499,6 +503,8 @@ try {
|
499 | 503 | // android.view.WindowManager$BadTokenException:Unable to add window -- token android.os.BinderProxy is not valid; is your activity running?
|
500 | 504 | // java.lang.IllegalStateException:View android.widget.TextView has already been added to the window manager.
|
501 | 505 | e.printStackTrace();
|
| 506 | + // 又或者上报到 Bugly 错误分析中 |
| 507 | + // CrashReport.postCatchedException(e); |
502 | 508 | }
|
503 | 509 | ```
|
504 | 510 |
|
@@ -738,7 +744,7 @@ implementation 'com.hjq:xxpermissions:9.8'
|
738 | 744 |
|
739 | 745 | * 尽量不要选择功能两套相同的框架,应当引用最合适的一套框架进行开发。
|
740 | 746 |
|
741 |
| -* 使用第三方库必须要依赖指定的版本号,而不能使用 + 号来指定依赖库最新的版本号。 |
| 747 | +* 使用第三方库必须要依赖指定的版本号,而不能使用 `latest-version` 或者 `+` 来指定依赖库最新的版本号。 |
742 | 748 |
|
743 | 749 | * 使用第三方开源库出现问题或者 Bug 时应及时通知到开源库的作者,如果没有及时回复就根据实际情况对问题进行修复。
|
744 | 750 |
|
|
763 | 769 | shop
|
764 | 770 | ```
|
765 | 771 |
|
766 |
| -* 模块混淆配置:请不要使用 `proguardFiles` 语句,而是应该使用 `consumerProguardFiles` 语句,因为 `consumerProguardFiles` 语句会将混淆规则和资源代码一同合并到 **aar** 包中,这样做的好处在于:在项目编译时会将 aar 包中的混淆规则合并到主模块中。 |
| 772 | +* 模块混淆配置:请不要使用 `proguardFiles` 语句,而是应该使用 `consumerProguardFiles` 语句,因为 `consumerProguardFiles` 语句会将混淆规则和资源代码一同打包到 **aar** 包中,这样做的好处在于:在项目编译时会将 aar 包中的混淆规则合并到主模块中。 |
767 | 773 |
|
768 | 774 | ```groovy
|
769 | 775 | android {
|
@@ -847,7 +853,7 @@ dependencies {
|
847 | 853 | apply from : '../config.gradle'
|
848 | 854 | ```
|
849 | 855 |
|
850 |
| -* 具体要用哪一种,可以根据实际情况而定,如果项目采用的是组件化,则可以考虑使用第一种方式,如果项目采用的是模块化,则可以考虑使用第二种方式。 |
| 856 | +* 具体要用哪一种,可以根据实际情况而定,如果项目采用的是组件化,则可以考虑使用第一种方式,如果项目采用的是模块化,则可以考虑使用第二种方式,当然两种一起结合用也是可以的。 |
851 | 857 |
|
852 | 858 | #### 代码注释规范
|
853 | 859 |
|
@@ -1392,6 +1398,29 @@ tools:context=".ui.dialog.PersonDataDialog"
|
1392 | 1398 |
|
1393 | 1399 | * Style 样式规范:对于一些常用并且样式比较统一的控件,例如 **Button**、**EditText** 等,我们对这些控件的样式进行抽取到 `style.xml` 文件中来,避免属性重复定义。
|
1394 | 1400 |
|
| 1401 | +#### 版本命名规范 |
| 1402 | + |
| 1403 | +* 版本名应该由三段整数组成 |
| 1404 | + |
| 1405 | + * 第一段:代表大版本号,如果出现 UI 大改版,或者项目出现大重构时 +1 |
| 1406 | + |
| 1407 | + * 第二段:代表需求版本号,一般双周发一次版,每个迭代周期 +1 |
| 1408 | + |
| 1409 | + * 第三段:代表 Bug 版本号,发版之后出现 Bug,需要发版修复时 +1 |
| 1410 | + |
| 1411 | +```groovy |
| 1412 | +versionName '4.8.0' |
| 1413 | +``` |
| 1414 | + |
| 1415 | +* 另外版本码应当和版本名保持一定的关联性,例如: |
| 1416 | + |
| 1417 | +```groovy |
| 1418 | +versionName '4.12.1' |
| 1419 | +versionCode 41201 |
| 1420 | +``` |
| 1421 | + |
| 1422 | +* 这样的好处在于:版本名越高,版本码也会变大,不仅能方便记忆,还能帮助我们更好地管理和升级版本,在一定程度上能避免**高版本名低版本码**的 apk 能被**低版本名高版本码**的 apk 覆盖安装的情况。 |
| 1423 | + |
1395 | 1424 | #### 致谢
|
1396 | 1425 |
|
1397 | 1426 | * [阿里巴巴Android开发手册.pdf](阿里巴巴Android开发手册.pdf)
|
|
0 commit comments