Android 开发规范文档

开发规范的目的是保证统一项目成员的编码风格,并使代码美观,易于项目维护。

1.项目结构

  • app模块
manifests:
包含AndroidManifest.xml文件 (用于声明应用程序的组件和权限)

java:
java目录存放Java源代码

res:
res目录则存放各种资源文件,如布局、图像、字符串等
  • 第三方库模块(导入的与app模块同级,结构一致)

  • Gradle脚本

Gradle是一种自动化构建工具,用于编译和管理Android项目。Gradle脚本主要在build.gradle文件中定义,包括项目级和模块级的build.gradle。这些脚本描述了项目的编译规则

  • 配置文件
settings.gradle:
settings.gradle文件指定了需要编译的模块

gradle.properties:
gradle.properties用于配置编译工程的命令行参数

local.properties:
local.properties用于指定本机中的Android SDK路径

  • 测试和库文件
androidTest目录:
androidTest目录用于编写Android测试用例

libs目录:
libs目录用于存放第三方jar包;
libs目录下的jar包会自动添加到构建路径中
  • 其他目录和文件
.idea .gradle .build:
这些是Android Studio自动生成的文件或编译生成文件

2.开发环境规范

  • 编辑器及版本:Android studio 4.0.1
  • 编码格式: UTF-8
  • 开发语言:java
  • jdk版本:jdk 1.8
  • gradle版本:gradle-6.1.1-all
  • sdk版本:16-30

3.第三方框架规范

  • 项目设计模式:mvcmvvm
  • 网络框架: rxjava + retrofitokhttp
  • UI绑定框架: butterknife
  • 图片展示框架: glide
  • 图片压缩框架: Lubancompressor
  • JSON解析框架: gson
  • 消息通信: eventbus

4.代码规范

4.1 文件编码:

UTF-8

4.2 包名:

包名全部小写,连续的单词只是简单地连接起来,不使用下划线。采用反域名命名规则,全部使用小写字母。

4.3 类名:

类名通常是名词或名词短语,接口名称有时可能是形容词或形容词短语。现在还没有特定的规则或行之有效的约定来命名注解类型。 名词,采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的.例:MainActivity 类名+后缀标识

4.4 方法名:

方法名通常是动词或动词短语。小驼峰命名初始化相关方法,使用init 为前缀标识, 如初始化布局 initView(方法返回值为 boolean 型的请使用is或 check为前缀标识返回某个值的方法, 使用 get 为前缀标识清除数据相关的 clearXX()removeXX()

4.5 常量名:

全部字母大写,用下划线分隔单词例:static final int NUMBER= 5;

4.6 资源文件命名:

全部小写,采用下划线命名法必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。所有 Activity 或 Fragment 的 contentView 必须与其类名对应,对应规则为:将所有字母都转为小写,将类型和功能调换(也就是后缀变前缓)。

1.contentview 命名: 例如:activity_main.xml
2.Dialog 命名: dialog_描述.xml 例如:dialog_hint.xml
3.PopupWindow 命名:ppw_描述.xml 例如:ppw_info.xml
4.列表项命名:item_描述.xml 例如:item_city.xml
5.layout 中的 id 命名命名模式为:view 缩写_view 的逻辑名称:例如:main_msg
4.7 注释:
 * @author 创建人: XXX
 * @mobile 联系电话:199999999XX
 * @email 邮箱:199999999XX@163.com
 * @createTime 创建时间: 2022/6/28
 * @describe 描述:APP主界面

5.基本组件规范:

  • Activity#onSaveInstanceState()方法不是 Activity 生命周期方法,它是用来在 Activity 被意外销毁时保存 UI 状态的,只能用于保存临时性数据,例如UI控件的属性等,不能跟数据的持久化存储混为一谈。持久化存储应该在 Activity#onPause()/onStop()中实行.
  • 避免在 Service#onStartCommand()/onBind()方法中执行耗时操作,如果有需求,应改用 IntentService 或采用其他异步机制完成.
  • 避免在 BroadcastReceiver#onReceive()中执行耗时操作,如果有耗时工作,应该创建 IntentService 完成,而不应该在 BroadcastReceiver 内创建子线程去做.
  • 避免使用隐式 Intent广播敏感信息,信息可能被其他注册了对应BroadcastReceiverApp接收,如果广播仅限于应用内,则可以使用 LocalBroadcastManager#sendBroadcast()实现,避免敏感信息外泄和 Intent拦截的风险.
  • 不要在 Activity#onDestroy()内执行释放资源的工作,例如一些工作线程的销毁和停止,因为 onDestroy()执行的时机可能较晚。可根据实际需要,在 Activity#onPause()/onStop() 中结合isFinishing()的判断来执行.
  • Activity或者Fragment中动态注册BroadCastReceiver时,registerReceiver()unregisterReceiver()要成对(生命周期对应)出现.Activity 的生命周期不对应,可能出现多次 onResume 造成 receiver 注册多个,但最终只注销一个,其余 receiver 产生内存泄漏。

6.其他:

  • 删除多余的import,减少警告出现,可利用 AS 的Optimize Imports(Settings -> Keymap -> Optimize Imports)快捷键
  • 新建项目以最新的Android SDK为准,及时适配最新SDK,并遵循最新的Android开发规范
  • id 命名 view缩写{_模块名}_逻辑名, 例如:btn_main_search、btn_back
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 包名全部采用小写,不用下划线区分单词 主包名采用[公司性质].[公司名称].[项目名称]的命名方式 例如:翡翠教育...
    gyymz1993阅读 3,120评论 1 29
  • android规范文档,请勿转载!谢谢... 1. 概述 1.1 前言团队协作能够显著有效的提高工作效率,而代码规...
    kai_w阅读 1,916评论 1 2
  • 转载自: https://blog.csdn.net/jun5753/article/details/837...
    努力与幸运阅读 1,689评论 0 5
  • 摘要 1 前言 2 AS 规范 3 命名规范 4 代码样式规范 5 资源文件规范 6 版本统一规范 7 第三方库规...
    Bitter_2014阅读 790评论 0 12
  • 1.项目结构 现在的MVP模式越来越流行。就默认采用了。如果项目比较小的话: app——Application A...
    黄海佳阅读 2,103评论 1 4