欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

总结下android开发规范

程序员文章站 2022-05-01 14:48:29
...

地址:https://github.com/Sherchen/AndroidConventions

1. AS规范

在Settings/Editor/CopyRight里添加一份,内容你可以在github上找一份,改下,这样每次新增文件,IDE都会自动加上CopyRight.

1.2 模板

在Settings/Editor/File and Code Templates右侧的includes/File header下修改,比如我的

/**
 * <pre>
 *     author : Sherchen
 *     e-mail : ncuboy_045wsq@qq.com
 *     time   : ${DATE}
 *     desc   : xxxx描述
 *     version: 1.0
 * </pre>
 */

每创建一个新的java文件,IDE就会自动加上,不要忘记修改desc, version等。

1.3 全局管理gradle变量。

一般都是在root project下面的build.gradle的文件末尾追加,比如我的

ext {
    minSdkVersion = 9
    targetSdkVersion = 22
    buildToolsVersion = '25.0.2'
    compileSdkVersion = 25
}

引用的时候,比如在app module下面的build.gradle,比如:

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
}

2. 工程结构

包括java层和android res层

2.1 Java层结构

我采用的是package by feature(PBF)分层方式,你可以PBF的介绍

总结下android开发规范

2.2 android res层结构

为了方便阅读和模块化开发的团队分工,我把android res目录按照模块拆分成几个,使用代码如下

sourceSets {
        main {
            res.srcDirs = [
                    'src/main/res',//common
                    'src/main/res-home',//for home module
                    'src/main/res-cnblog',//for cnblog module
                    'src/main/res-csdn', //for csdn module
                    'src/main/res-github', //for github module
                    'src/main/res-jianshu' //for jianshu module
            ]
        }
}

拆分后的android res 视图如下

总结下android开发规范

3. Android资源命名规范

3.1 文件命名

3.1.1 layout命名

layout的一般命名规则是,比如下面

Component 组件 Class Name Layout Name
Activity HomeActivity activity_home.xml
Fragment HomeTopFragment fragment_home_top.xml
Dialog HomeUpgradeDialog dialog_home_upgrade.xml
AdapterView Item item_csdn.xml
include(通用组件) include_list

3.1.2 drawable命名

drawable 文件的命名规范

Asset Type Prefix 前缀 Example
Action bar ab_ ab_stacked.9.png
Button btn_ btn_send_pressed.9.png
Dialog dialog_ dialog_top.9.png
Divider divider_ divider_horizontal.9.png
Icon ic_ ic_star.png
Menu menu_ menu_submenu_bg.9.png
Notification notification_ notification_bg.9.png
Tabs tab_ tab_pressed.9.png

icons文件的命名规范

Asset Type Prefix 前缀 Example
Icons ic_ ic_star.png
Launcher icons ic_launcher ic_launcher_calendar.png
Menu icons and Action Bar icons ic_menu ic_menu_archive.png
Status bar icons ic_stat_notify ic_stat_notify_msg.png
Tab icons ic_tab ic_tab_recent.png
Dialog icons ic_dialog ic_dialog_info.png

选择器状态文件的命名规范

State Suffix 尾缀 Example
Normal _normal btn_order_normal.9.png
Pressed _pressed btn_order_pressed.9.png
Focused _focused btn_order_focused.9.png
Disabled _disabled btn_order_disabled.9.png
Selected _selected btn_order_selected.9.png

3.1.3 其他文件命名

  • menu 因为menu文件较少,而且都在一个menu目录下面,所以一般命名就是.xml,比如home.xml
  • anim 直接命名,比如: fade_in.xml
  • values 目录下面的文件,使用复数形式,比如: arrays.xml, attrs.xml, colors.xml, configs.xml, dimens.xml, strings.xml, styles.xml

3.2 文件下面的name 命名

3.2.1 layout ID命名

一般规则:, 比如android:id=”tv_home_display”,这里的what,一般使用控件单词的缩写,参考5 附录

3.2.2 color 命名

直接定义颜色值,比如

<color name="white"     >#FFFFFF</color>
<color name="gray_light">#DBDBDB</color>
<color name="gray"      >#939393</color>
<color name="gray_dark" >#5F5F5F</color>
<color name="black"     >#323232</color>

3.2.3 dimen命名

一般规则: ,如果不需要特殊定义这个dimen在哪个模块使用,可以省略,比如

<!-- font sizes -->
<dimen name="font_22">22sp</dimen>

<!-- typical spacing between two views -->
<dimen name="spacing_40">40dp</dimen>

<!-- typical sizes of views -->
<dimen name="button_height_60">60dp</dimen>

3.2.4 string命名

一般规则: _,比如

<!--通用模块-->
<string name="loading">加载中...</string>
<string name="ok">确认</string>
<string name="cancel">取消</string>

<!--home模块-->
<string name="home_tab_hot">热点</string>
<string name="home_tab_find">发现</string>
<string name="home_tab_nearby">附近</string>

3.2.5 style命名

一般规则:.,比如

<style name="ImageView"></style>

<style name="ImageView.Icon">
    <item name="android:padding">8dp</item>
</style>

<style name="TextView">
    <item name="android:textColor">#212121</item>
    <item name="android:textSize">14px</item>
</style>

<style name="TextView.12">
    <item name="android:textSize">12px</item>
</style>

4. Java规范

4.1 Java文件命名规范

类名都以UpperCamelCase风格编写。

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

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

描述 例如
Activity 类 Activity为后缀标识 欢迎页面类WelcomeActivity
Fragment 类 Fragment为后缀标识 主页顶部类HomeTopFragment
Dialog 类 Dialog为后缀标识 升级对话框类UpgradeDialog
Adapter类 Adapter 为后缀标识 新闻详情适配器 NewDetailAdapter
解析类 Parser为后缀标识 首页解析类HomePosterParser
工具方法类 Utils或Manager为后缀标识(与系统或第三方的Utils区分)或功能+Utils 线程池管理类:ThreadPoolManager日志工具类:LogUtils(Logger也可)打印工具类:PrinterUtils
数据库类 以DBHelper后缀标识 新闻数据库:NewDBHelper
Service类 以Service为后缀标识 时间服务TimeService
BroadcastReceiver类 以Receiver为后缀标识 推送接收JPushReceiver
ContentProvider类 以Provider为后缀标识 ShareProvider
自定义的共享基础类 以Base开头 BaseActivity,BaseFragment

测试类的命名以它要测试的类的名称开始,以Test结束。例如:HashTestHashIntegrationTest

接口(interface):命名规则与类一样采用大驼峰命名法,多以able或ible结尾,如
interface Runnableinterface Accessible

4.2 Java编码规范

4.2.1 字段(field)命名

  • 类字段,包括变量和常亮
    1. 公有变量按 小驼峰 法命名
    2. 私有 & 非静态成员变量以 m 开头
    3. 私有 & 静态成员变量以 s 开头
    4. 常量以大写字母和下划线 _ 组成
    5. 尽量使用 类型+功能/描述的模式 ,如 mTvDisplay
    private TextView mTvDisplay;
    //静态常量
    public static final int SOME_CONSTANT = 42;
    //公有变量
    public int publicField;
    //私有静态变量
    private static String sSingleton;
    //默认变量
    int mPackagePrivate;
    //私有变量
    private int mPrivate;
    //继承型变量
    protected int mProtected;
  • 局部变量
    局部变量名以lowerCamelCase风格编写,比起其它类型的名称,局部变量名可以有更为宽松的缩写。
    虽然缩写更宽松,但还是要避免用单字符进行命名,除了临时变量和循环变量。
    即使局部变量是final和不可改变的,也不应该把它示为常量,自然也不能用常量的规则去命名它。

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

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

4.2.2 方法命名

  • 类方法采用 小驼峰 命名法
  • 根据函数所完成功能命名 , 如 changView()
  • 在函数头写对于函数功能、参数和返回值的注释,如:
  /**
    * 获取两个数中最大的一个
    *
    * @param value1 参与比较的第一个数
    * @param value2 参与比较的第二个数
    * @return 两个参数中最大的一个数
    */
   public int max(int value1, int value2) {
       return (value1 > value2) ? value1 : value2;
   }

4.3 编码习惯

4.3.1 不要忘记添加注释

/**
 * 获取Sim卡运营商名称
 * <p>中国移动、如中国联通、中国电信</p>
 * @param context 上下文
 * @return 移动网络运营商名称
 */
public static String getSimOperatorByMnc(Context context) {
    ---
}

4.3.2 不要忘记处理异常

void setServerPort(String value) {
    try {
        serverPort = Integer.parseInt(value);
    } catch (NumberFormatException e) {
        //处理异常结果
    }
}

//不要像下面使用Exception类捕抓异常
try {
    someComplicatedIOFunction();        // may throw IOException
    someComplicatedParsingFunction();   // may throw ParsingException
    // phew, made it all the way
} catch (Exception e) {                 // I'll just catch all exceptions
    handleError();                      // with one generic handler!
}

4.3.3 方法名称不要太长

4.3.4 方法参数不要太多

4.3.5 方法行数不要太多。

4.3.6 更多规范可以参考code-style

5. 附录

UI控件缩写表

名称 缩写
TextView tv
EditText et
ImageButton ib
Button btn
ImageView iv
ListView lv
GridView gv
GridLayout gl
ProgressBar pb
SeekBar sb
RadioButtion rb
CheckBox cb
ScrollView sv
LinearLayout ll
FrameLayout fl
RelativeLayout rl
RecyclerView rv
WebView wv
VideoView vv
Spinner spn
ToggleButton tb
新组件或自定义组件 可以根据情况

常见的英文单词缩写表

名称 缩写
icon ic (主要用在app的图标)
color cl(主要用于颜色值)
average avg
background bg(主要用于布局和子布局的背景)
selector sel主要用于某一view多种状态,不仅包括Listview中的selector,还包括按钮的selector)
buffer buf
control ctrl
default def
delete del
document doc
error err
escape esc
increment inc
infomation info
initial init
image img
Internationalization I18N
length len
library lib
message msg
password pwd
position pos
server srv
string str
temp tmp
window wnd(win)

参考

android官方手册

Android包命名规范

Android 开发最佳实践

Android 编码规范

安卓开发规范(updating)

Android-Code-Style

android-guidelines

            ——powered by Sherchen

[pan=https://github.com/Sherchen/AndroidConventions]AndroidConventions [/pan]