Android开发规范(自用简单版)

一、命名规范

1. 项目名

(1) App 项目以产品对应英文命名,例:

教学中⼼ TeachingCenter

(2) 模块以 模块名 命名,例:

公共模块 common
用户模块 user

(3) 组件以 library- + 组件 命名,例:

公共组件 library-common
日历组件 library-calendar

2. 类名

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

描述例如
ActivityActivity 为后缀标识欢迎页面类 WelcomeActivity
AdapterAdapter 为后缀标识公告详情适配器 AnnouncementAdapter
工具方法类UtilsManager 为后缀标识线程池管理类:ThreadPoolManager
日志工具类:LogUtilsLogger 也可)
打印工具类:PrinterUtils
数据库类DBHelper 后缀标识信息数据库:InfosDBHelper
ServiceService 为后缀标识时间服务 TimeService
BroadcastReceiverReceiver 为后缀标识推送接收 JPushReceiver
ContentProviderProvider 为后缀标识ShareProvider
自定义的共享基础类Base 开头BaseActivity, BaseFragment

3. 接口(interface)

命名规则与类一样采用大驼峰命名法,但必须冠以前缀I ,比如ISomeInterface,接口的实现 类则是去掉前缀I但添加后缀Impl,比如SomeInterfaceImpl

注意:如果项目采用 MVP,所有 Model、View、Presenter 的接口都以 I 为前缀,不加后缀,其他的接口采用上述命名规则。

4. 方法名

方法名都以 lowerCamelCase 风格编写。

方法说明
initXX()初始化相关方法,使用 init 为前缀标识,如初始化布局 initView()
isXX(), checkXX()方法返回值为 boolean 型的请使用 is/check 为前缀标识
getXX()返回某个值的方法,使用 get 为前缀标识
setXX()设置某个属性值
handleXX(), processXX()对数据进行处理的方法
displayXX(), showXX()弹出提示框和提示信息,使用 display/show 为前缀标识
updateXX()更新数据
saveXX(), insertXX()保存或插入数据
resetXX()重置数据
clearXX()清除数据
removeXX(), deleteXX()移除数据或者视图等,如 removeView()
drawXX()绘制数据或效果相关的,使用 draw 前缀标识

5. 常量

常量名全部大写字母,单词间以下划线分割,如:CONSTANT_VALUE_A

6. 控件

为了更好地区分 UI 控件和普通成员变量,所有用来表示控件的成员变量统一加上控件缩写作为前缀。

名称缩写
Buttonbtn
CheckBoxcb
EditTextet
FrameLayoutfl
GridViewgv
ImageButtonib
ImageViewiv
LinearLayoutll
ListViewlv
ProgressBarpb
RadioButtionrb
RecyclerViewrv
RelativeLayoutrl
ScrollViewsv
SeekBarsb
Spinnerspn
TextViewtv
ToggleButtontb
VideoViewvv
WebViewwv

7. 数据类型

对于表示集合或者数组的非常量字段名,我们可以添加后缀来增强字段的可读性,比如:
集合添加如下后缀:List、Map、Set。
数组添加如下后缀:Arr。
例如:userListuserArrfirstNameSet

8. 资源文件

资源文件命名为全部小写,采用下划线命名法。

如果是组件化开发,可以在组件和公共模块间创建一个 ui 模块来专门存放资源文件,然后让每个组件都依赖 ui 模块。这样做的好处是如果老项目要实现组件化的话,只需把资源文件都放入 ui 模块即可。

8.1 动画资源文件(anim/ 和 animator/)

安卓主要包含属性动画和视图动画,其视图动画包括补间动画和逐帧动画。属性动画文件需要放在 res/animator/ 目录下,视图动画文件需放在 res/anim/ 目录下。

命名规则:{模块名_}逻辑名称
说明:{} 中的内容为可选,逻辑名称 可由多个单词加下划线组成。如:
activity_bottom_in.xmlactivity_top_out.xml

8.2 图片资源文件

res/drawable/ 目录下放的是位图文件(.png、.9.png、.jpg、.gif)或编译为可绘制对象资源子类型的 XML 文件,而 res/mipmap/ 目录下放的是不同密度的启动图标,所以 res/mipmap/ 只用于存放启动图标,其余图片资源文件都应该放到 res/drawable/ 目录下。
命名规则:类型{_模块名}_逻辑名称类型{_模块名}_颜色{} 内容可选)。例如:
btn_red.pngbg_input.pngdivider_white.png

8.3 布局资源文件(layout/)

命名规则:类型_模块名类型{_模块名}_逻辑名称
例如:
activity_main.xml fragment_live_list.xml

二、编码规范

1. 类成员顺序

推荐使用如下排序:

  1. 常量
  2. 字段
  3. 构造函数
  4. 重写函数和回调
  5. 公有函数
  6. 私有函数
  7. 内部类或接口
    例如:
class MainActivity : Activity() {

    val TAG: String = this.javaClass.simpleName

    private var title: String = ""
    private lateinit var tvTitle: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    private fun setTitle(titleStr: String) {
        title = titleStr
    }

    private fun setUpView() {
    }

    inner class AnInnerClass {

    }
}

2. 编写简短方法

在可行的情况下,尽量编写短小精炼的方法。如果某个方法的代码超出 40 行,请考虑是否可以在不破坏程序结构的前提下对其拆解。

3. 键值对字符串常量

针对常用的键值对函数,比如 SharedPreferencesBundleIntent等,请参考以下规则:

字段名前缀
SharedPreferencesPREF_
BundleBUNDLE_
Fragment ArgumentsARGUMENT_
Intent ExtraEXTRA_
Intent ActionACTION_
例如:
 companion object{
        // 注意:字段的值与名称相同以避免重复问题
        const val PREF_EMAIL = "PREF_EMAIL"
        const val BUNDLE_AGE = "BUNDLE_AGE"
        const val ARGUMENT_USER_ID = "ARGUMENT_USER_ID"

        // 与意图相关的项使用完整的包名作为值的前缀
        const val EXTRA_SURNAME = "com.myapp.extras.EXTRA_SURNAME"
        const val ACTION_OPEN_USER = "com.myapp.action.ACTION_OPEN_USER"
    }

4. 换行

4.1 操作符换行

除赋值操作符之外,我们把换行符放在操作符之前,例如:

val longName = anotherVeryLongVariable + anEvenLongerOne - thisRidiculousLongOne
        + theFinalOne;

赋值操作符的换行我们放在其后,例如:

val longName =
        anotherVeryLongVariable + anEvenLongerOne - thisRidiculousLongOne + theFinalOne;

4.2 函数链的换行

当同一行中调用多个函数时(比如使用构建器时),对每个函数的调用应该在新的一行中,我们把换行符插入在 . 之前。

例如:

Glide.with(context)
        .load("https://blankj.com/images/avatar.jpg")
        .into(ivAvatar);

4.3 RxJava 链式的换行

RxJava 的每个操作符都需要换新行,并且把换行符插入在 . 之前。

例如:

    fun doSomething() {
        ApiManager.getInstance().liveVideoService
                .updateApplyStatus(url, liveKey, applyStatus)
                .compose(RxHelper.defalutHandleResult<Any>())
                .subscribe(object : RxSubscriber<Any>(this) {
                    override fun _onNext(t: Any?) {
                    }

                    override fun _onError(message: String?) {
                    }
                })
    }

三、注释

1. 类注释

/**
 *     author : dell
 *     time   : 2022/08/24
 *     desc   : 欢迎页面
 */
class WelcomeActivity : Activity() {
}

2. 方法注释

   /**
     * bitmap 转 byteArr
     *
     * @param bitmap bitmap 对象
     * @param format 格式
     * @return 字节数组
     */
    fun bitmap2Bytes(bitmap: Bitmap?, format: Bitmap.CompressFormat?): ByteArray? {
        if (bitmap == null) return null
        val baos = ByteArrayOutputStream()
        bitmap.compress(format, 100, baos)
        return baos.toByteArray()
    }

3. 其他注释

        // TODO: 2022/8/24  待处理
        // FIXME: 2022/8/24 待修复

四、版本统一规范

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

ext {
    // Sdk and tools
    compile_sdk_version = 29
    build_tools_version = '29.0.2'
    min_sdk_version = 22
    target_sdk_version = 29

    version_code = 10
    version_name = '1.0.0'

    // App dependencies
    support_version = '26.1.0'

    leakcanary_version = '1.5.4'
}
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值