# 移动端提效报告
# 一、协作规范
# 产品协作
- 熟悉原型,预判技术实现方案
- 评估存在的技术风险和应对方案
# UI协作
- 设计稿分辨率:Android/IOS 逻辑像素
375 x n
- 资源格式:svg(优先)、png
- 定义色卡编号:
RGB 255,255,255
和十六进制颜色码#FFFFFF
- H5预留原生导航栏 navigation bar
# 后端协作
- 接口输出模型Model(含嵌套模型)属性命名一致
# 组内协作
- 组内不定期组织技术分享和代码审查(不增加工作量前提),养成大家对代码规范的习惯,通过学习交流,助于自身成长;
# 二、流程规范
# 技术选型规范
- 软件架构:
- Android:MVP、MVVM
- IOS:MVC
- 网络框架:开源中相对较成熟完善、活跃度高、持续处在维护状态;
- Android:二次封装 retrofit2+okhttp3
- IOS: 二次封装 oc-AFNetworking、swift-Alamofire
- 图片加载框架
- Android:Glide、Picasso、Fresco
- IOS :SDWebImage、YYWebImage
- 其它依赖库与SDK
- 网易云信(有话说)、VODUpload(阿里云)、dsBridge(JS桥接)、MMKV(高效读写)等等
# 代码提交规范
- 参考—《移动端Git代码版本管理规范》
# 版本管理规范
- 版本格式:0.0.0(主版本.次版本号.修订号)
highCode = 1 // 主版本
lowCode = 0 // 次版本(最大99)
fixCode = 0 // 修订号(最大99)
testCode = 11 // 自增号(最大99)
// 版本计算规则 1000011
versionCode = highCode * 1000000 + lowCode * 10000 + fixCode * 100 + testCode
// 外部显示版本 1.0.0
versionName = highCode + "." + lowCode + "." + fixCode
# 三、开发规范
# 代码规范
- 参考—《移动端代码规范-Android》
- 参考—《移动端代码规范-IOS》
# 安全规范
- 数据安全,使用
HTTPS
协议,信息传输加密验证防止被篡改 - 本地数据,存储关键数据必须加密
- 日志泄露,使用一套日志工具类
- 防止反编译,打包时引入代码混淆和加固
- 组件安全,控制标准组件(
Activity
、Service
、Receiver
、Provider
)的访问权限,使用安全高效的LocalBroadcastManager
发送内部广播
# 适配规范
- 工程资源适配**(推荐)**
drawable-xxhdpi 1920x1080
、Assets.xcassets 2X3X
- Android字号采用dp单位(sp单位会跟随系统大小变化)
- Android多使用约束布局
ConstraintLayout
(推荐) - IOS字号采用pt单位
- IOS使用第三方自动布局
Masonry
,原理与Android一致 - iPhone X以上设备在顶部状态栏高度、Tabbar高度、底部安全区域与iPhone X之前的设备不同
# API兼容规范
兼容版本范围:Android 5.0~11.0 、IOS 11.0~15.0
在Android 11版本上,系统会根据App targetSdkVersion决定运行模式; targetSdkVersion >= 30,默认为分区存储,并且无法取消; targetSdkVersion < 29,默认为分区存储,可通过requestLegacyExternalStorage更改;
兼容高低版本的API;
private val map = object : LinkedHashMap<Long, Data>() fun get(key: Long): Data? { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return map.getOrDefault(key, null) // Android N 开始支持的API } else { return map.get(key) } }
if ([self isKindOfClass:UIWindow.class]) { if (@available(iOS 13.0, *)) { // IOS 13 开始支持的API return !!((UIWindow *)self).windowScene; } else { return YES; } }
# 全局常量规范
- 建立全局存储常量Key,避免出现覆盖, 命名规则
业务线_功能名称
- 使用
MMKV
替换SharedPreferences
、NSUserDefaults
、SQLite
提升读写性能;SPManager
除了统一管理读写操作外也能无缝对接任何其它读写库;
object LocalSPConstant {
const val LOCAL_PREFIX = "tl_"
const val SYSTEM_VERSION_UPDATE = "${LOCAL_PREFIX}system_version_update"
const val POPUP_PRIVACY = "${LOCAL_PREFIX}popup_privacy"
}
object SPManager {
@JvmStatic
fun putString(key: String, value: String) {
MMKV.defaultMMKV()?.encode(key, value)
}
@JvmStatic
fun getString(key: String): String? {
return MMKV.defaultMMKV()?.decodeString(key)
}
}
// 例.SPManager.putString(LocalSPConstant.SYSTEM_VERSION_UPDATE, "1.0.0")
# 核对原型并自测
- 符合原型设计逻辑
- 符合UI设计图效果
- 数据边界值自测
# 四、应用监控
以第三方SDK接入为主,如. 友盟统计、百度统计、360、腾讯;
- 埋点
- 性能监控
- 异常监控
# 五、成效总结
良好的代码规范
- 可以促进团队合作
- 提高代码可读性和BUG修复率
- 有助于代码审查
- 有助于自身成长
- 降低维护成本
评估依据:主要是以以往的个人经验进行评估
场景 | 维度 | 普通开发 | 遵守规范 |
---|---|---|---|
版本迭代 | 开发工期 | 14天 | 11天 |
问题修复 | 3天 | 2天 | |
AB岗位 | 工作交接 | 7天 | 3天 |
团队协作 | 代码复用 | 低 | 高 |
工程质量 | 臃肿、杂乱 | 一致性、清晰 | |
业务沟通 | 难 | 易 | |
协作风险 | 高 | 低 |