美文网首页Android开发干货
Android项目规范文档

Android项目规范文档

作者: 黄海佳 | 来源:发表于2017-04-24 14:50 被阅读157次
1.项目结构

现在的MVP模式越来越流行。就默认采用了。如果项目比较小的话:

  • app——Application Activity Fragment Presenter等的顶级父类

  • config——API,常量表等

  • model——数据层
    —— entities——数据模型

  • presenter——MVP的P

  • service——服务

  • ui——MVP的V

  • utils——工具类集合

  • widget——各个可复用View集合

如果项目比较大,上面的方式一定会造成presenter和view里近百个文件。看瞎眼系列。推荐下列方式:

  • app

  • config

  • model
    —— entities

  • module——将界面层以功能模块分配包。
    —— launch
    —— main
    —— account
    —— news
    —— music
    ……

  • utils

  • widget

2.配置主题

对于不遵守Material Design的项目无视这一步。
1.先在color.xml中写好需要的颜色:

<resources> 
  <color name="Orange">#ff5722</color> 
  <color name="DeepPurple">#673AB7</color> 
  <color name="DeepPurple900">#311B92</color> 
  <color name="White">#fff</color> 
  <color name="Gray">#888888</color> 
  <color name="Gray100">#dddddd</color> 
  <color name="Gray600">#999999</color>
</resources>

注意color.xml是配色表。应该是描述颜色而不是对字体颜色,背景颜色等的定义。这样能防止相近的颜色重复定义。而导致界面颜色不统一。

2.在style.xml里定义主题:
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> 
  <!-- Customize your theme here. --> 
  <item name="colorPrimary">@color/DeepPurple</item> 
  <item name="colorPrimaryDark">@color/DeepPurple900</item> 
  <item name="colorAccent">@color/Orange</item>
</style>

<style name="AppTheme" parent="AppTheme.Base"></style>

在res目录下,创建一个values-v21目录,再创建一个style.xml:

<style name="AppTheme" parent="AppTheme.Base">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
    <item name="android:statusBarColor">?colorPrimaryDark</item>
</style>

然后在AndroidManifest.xml文件中修改application的theme属性为上面定义的AppTheme.即可实现沉浸式状态栏。

3.依赖库与SDK

常选的库:

  • gradle-retrolambda
    Android的lambda表达式插件

  • Glide
    Android最屌图片加载库

  • butterknife
    View注解库和配套插件[android-butterknife-zelezny]

  • (https://github.com/avast/android-butterknife-zelezny)

  • okhttp
    网络请求

  • 'com.android.support:design:23.0.1'
    谷歌Material Design控件库

  • EasyRecyclerView
    支持下拉上拉刷新等功能全面的RecyclerView

  • SwipeBackHelper
    Activity滑动关闭支持库,能达到微信效果

  • RxJava
    观察者模式的事件消息交互框架

  • RxAndroid
    支持在Android 中通过Rx切换到主线程

  • RxBus
    提供如EventBus一般使用的Rx框架

  • RxPermissions
    提供在Rx上来管理Android M (Android6.0)的动态权限框架

  • RxLifecycle
    解决Rx因为观察者在订阅后Fragment持有context导致内存泄漏的问题

  • Eventbus
    翻译为事件总线,用于解决android中的事件交互和回调.同Rx一样也是观察者模式

  • retrofit
    android中的通讯注解框架,用于发送http请求.配合Rx能达到高效的开发速度

  • BaseRecyclerViewAdapterHelper
    如名字一样他是RecyclerView的适配器超类库.支持各种姿势写adapter,轻松减少大量重复代码.

  • AndroidAutoLayout
    国内大神张鸿洋出的布局框架.很不错.减少大量布局调优工作

  • zxing
    老牌二维码扫描框架

  • compressor
    图片压缩框架,压缩率很高.支持配置.Api友好

  • RxBinding
    可以实现数据层与View层的绑定,当数据发生变化,View会自动更新UI。还有其他功能非常强大(MVVM)

  • PhotoView
    可根据手势进行缩放的图像库,这个也很常见

  • AndroidImageSlider
    展示头部Banner的库,动画效果很多,不过需要依赖picasso和nineoldandroids这两个库
  • FlycoTabLayout
    样式比TabLayout多样的Tab库

  • ijkplayer
    B站出品的视频解码库

  • DanmakuFlameMaster
    同样B站出品的弹幕库

  • ShineButton
    炫酷效果的点击按钮,主要用于显示收藏之类的动画

  • Android-SpinKit
    集成多种动画效果的Drawable,之前有看源码觉得代码封装得挺好,动画不仅仅只能用在View上

  • Tinker
    微信Android热补丁方案,功能强大,和其它热修补方案对比看这里wiki

  • Jsoup
    抓取网页数据

  • SwitchButton
    SwitchButton按钮

  • MaterialSpinner
    一个通用的Spinner

  • TagLayout
    标签布局功能,还可以单独作为特殊点击效果的按钮

  • Tiny
    图片处理框架,让你压缩图片等不再是问题

  • transitions framework
    动画框架

融云——即时通讯
友盟——数据统计,推送,意见反馈,自动更新,第三方分享及登录,社区
七牛——云存储
Mob——短信验证
Bmob——做后台不求人

依赖这一大堆库和SDK以后。建议在合适的时机初始化他们,而不是全堆在Application的onCreate()里面。这样会导致启动时间过长。启动后也会较卡。虽然是不会影响功能正常使用。

4.配置Gradle

某些SDK运行时需要检查签名是否正确。所以在debug模式时也必须用正式KEY签名。而把签名放进版本控制不是明智的做法。所以推荐下面的做法:在app的gradle加入下面代码

Properties props = new Properties()
props.load(new FileInputStream(file("signing.properties")))
android { 
  signingConfigs { 
    release{ 
      keyAlias props['KEY_ALIAS'] 
      keyPassword props['KEY_PASSWORD'] 
      storeFile file(props['KEYSTORE_FILE']) 
      storePassword props['KEYSTORE_PASSWORD'] 
    } 
   } 
  buildTypes { 
    release { 
      signingConfig signingConfigs.release 
    } 
    debug { 
        signingConfig signingConfigs.release 
      } 
   }
}

在app的gradle文件同级目录新建signing.properties文件,里面填入你的key的相应信息

KEYSTORE_FILE = C:\\Users\\Mr.Jude\\Documents\\Android\\HelloWorld.jksKEYST
ORE_PASSWORD = xxxxxx
KEY_ALIAS = xxxxxx
KEY_PASSWORD = xxxxxx

将signing.properties添加进忽略目录。其他人pull下来代码后。自己新建signing.properties填入相应信息后即可编译成功。

5.制定开发规范
命名规范
  • 包名全部采用小写

  • 常量、枚举等均采用大写形式,用下划线区分各单词。使用static final

private static final String TAG = "XXXX"
  • 类名、接口名、枚举名。第一个和后面的单词都要第一个字母大写
MainActivity,InstalledAppDetails
  • 资源文件命名
activity_main
fragment_account
item_person
include_toolbar
view_progress

不过对于庞大项目的开发。近百个activity开头的layout列表还是会眼瞎。所以那种情况会在前面加上模块名。
id命名,例

btn_send
tv_name
list_persons
et_password
  • 然后用butterknife的插件生成变量会自动将下划线变成驼峰命名
    变量命名:以m开头。例
mAdapter
  • 注意图片文件命名只能用小写字母、数字,否则会导致R文件无法编译出来

  • 继承自安卓组件的类,一般采用父类名作为后缀,

class LoginActivity extends Activity{}
  • 自定义异常必须以Exception结尾

  • 全局变量添加所有者前缀:实例成员变量前缀m(表示member),类静态变量前缀s(表示static)

protected ContentResolver mContentResolver;
  • 控件变量添加组件前缀,控件前缀+控件属性,控件缩写
button->btnLogin,或者bt_login;
  • 全局名称mBtnNext局部名称
btnNext
  • 构造方法采用递增方式(参数多的写在后面),参数少的调用参数多的构造函数。这样也减少初始化代码。比如开源库
PagerSlidingTabStrip
编码规范
  • 源文件编码格式为 UTF-8。

  • 服务端可以实现的,就不要放在客户端

  • 引用第三方库要慎重,避免应用大容量的第三方库,导致客户端包非常大

  • 处理应用全局异常和错误,将错误以邮件的形式发送给服务端

  • 图片的.9处理

  • 使用静态变量方式实现界面间共享要慎重

  • 单元测试(逻辑测试、界面测试)

  • 不要重用父类的handler,对应一个类的handler也不应该让其子类用到,否则会导致message.what冲突

  • activity中在一个View.OnClickListener中处理所有的逻辑

  • strings.xml中使用%1$s实现字符串的通配

  • 数据一定要效验,例如字符型转数字型,如果转换失败一定要有缺省值;

  • 服务端响应数据是否有效判断

  • 对于未完成的方法,使用TODO加以标记

  • 若功能已完成,但存在效率等潜在问题时,使用XXX加以标记
    若代码存在严重问题或仅用于调试,使用FIXME加以标记

  • values目录下文件名称较固定,不得随意更改

提交规范
  • 代码及时更新,不要和服务器有太大的差别,减少merge的log

  • 提交代码时,如果出现冲突,必须仔细分析解决,才可提交

  • 提交代码之前先在本地进行测试,确保项目能编译通过,且能够正常运行,本地没有验证的代码原则上不允许提交

  • 必须保证服务器上的版本是正确的,项目有错误时,不要进行提交
    提交之前先更新代码

  • 提交时注意不要提交本地自动生成的文件,比如我们AndroidStudio项目中的 idea,build文件夹是不需要提交的

  • 不要提交自己不明白的代码

  • 提前协调好项目组成员的工作计划,减少冲突

  • 对提交的信息尽量写得详细,方便后续定位问题;最好使用提交模板

[CAUSE]     :
[SOLUTION]  :
[REVIEW]    : Own
[SIDEEFFECT]: without side effects
[PROJECT]   : V3
[CR]        :V3 SM-2182
[MODULAR]   :
modified:   src/com/android/settings/applications/InstalledAppDetails.java
架构设计规范

为了避免合作开发写的代码风格迥异。或做出了多套开发模式。下面是个例子。毕竟是为了高效开发而制定的。适合自己项目的才是最好。

  • 所有Activity继承BaseActivity

  • 所有Fragment继承BaseFragment

  • 所有Presenter继承BasePresenter
    这样利于生命周期管理。也可以方便的全局修改。命名,例

AccountFragment
UserDetailActivity
  • 通过引入 Event Bus(事件总线,这个项目使用的是otto)。它允许我们在Data Layer中发送事件,以便View Layer中的多个组件都能够订阅到这些事件。比如DataManager 中的退出登录方法可以发送一个事件,订阅这个事件的多个Activity在接收到该事件后就能够更改它们的UI视图,从而显示一个登出状态。 当然你也可以有很多的选择,EventBus,Otto,自定义RxBus等。减少回调。

  • 定好网络请求写法。文件存储方式与位置。写好项目所使用的类库框架用法。

  • 对于有键盘的页面,默认不弹键盘
android:windowSoftInputMode="stateHidden|adjustResize" 
维护性

1.代码规范 2.框架稳定性 3.封装 4.耦合

扩展性:

1.抽象接口 2.元素重用 3.单一职责 4.替换性 5.耦合

安全性:

1.数据安全性 数据安全就包括数据抓取、数据拦截以及数据修改 2.操作安全性 避免对一个操作重复执行

6.style 文件

针对style文件越来越大,可以将其分离如styles.xml, styles_home.xml, styles_item_details.xml, styles_forms.xml不同的资源目录在res/values中是任意的

7.意识到WebView的问题
  • 加载网页时不要处理HTML文件
  • 避免使用WebView显示简单的Text和Button
8.测试框架
  • Android Gradle发布了connectedAndroidTest ,是JUnit的一个扩展,可以测试程序员创建的JUnit Test
  • 使用** Robolectric**进行单元测试,而非UI测试
  • 使用Robotium进行UI测试

其他

android:screenOrientation="portrait"  //强制竖屏(只针对activity)
android:exported="true"//在Activity中该属性用来标示:当前Activity是否可以被另一个Application的组件启动:true允许被启动;false不允许被启动。(四大组件都有这个属性)
android:launchMode="singleTask"//主界面

android:largeHeap="true"  //可以使用的最大内存值
android:hardwareAccelerated="true"  //启动硬件加速,(占用内存)
android:windowSoftInputMode="adjustPan|stateHidden"//输入法问题
android:supportsRtl="true"//支持从右到左right-to-left )的布局
android:process="com.github.obsessive.simplifyreader.application"   //应用进程

android:animateLayoutChanges="true"//View的伸展动画
android:hardwareAccelerated="true"

相关文章

  • Android 项目规范

    Android 项目规范 本文档的目的是定义项目规范。这些应遵循整个 Android 项目以帮助我们保持整洁和统一...

  • Android项目规范文档

    1.项目结构 现在的MVP模式越来越流行。就默认采用了。如果项目比较小的话: app——Application A...

  • 解决打包Android Studio Gradle Issue:

    猫眼android技术开发规范文档 书写规范 编码 编码方式统一用UTF-8. Android Studio默认已...

  • 【Android 进阶】 代码规范

    前言 这份文档参考了 Google Java 编程风格规范和 Google 官方 Android 编码风格规范。该...

  • 项目管理内容

    1、项目进度把控(开发时间、测试接入) 2、项目质量把控(代码规范、接口规范、文档规范) 3、项目人力把控 4、项...

  • 项目规范文档

    颜色 学科颜色 上升、下降、持平颜色 考勤状态颜色 图标 学科图标 课堂详情、签到、筛选 chart 交互规范

  • Android Studio 的项目结构

    本文参考Google官方文档 : Android Studio 项目概览 项目视图 Android项目文件较多,分...

  • android文档开发规范

    android规范文档,请勿转载!谢谢... 1. 概述 1.1 前言团队协作能够显著有效的提高工作效率,而代码规...

  • android规范文档

    written by leo.wang Android代码开发规范 1 类声明 1.1 只有一个顶级 类声明每个顶...

  • 2018年大四生产实习接口文档

    六. 后端接口文档 6.1 接口文档说明 由于该项目为前后端分离项目且接口符合 RESTful API 规范,项目...

网友评论

  • 勤知:总结的很到位,赞一个

本文标题:Android项目规范文档

本文链接:https://www.haomeiwen.com/subject/pqkpzttx.html