Android 框架设计模板

news/2024/12/21 21:48:54/

不同项目在使用该模板时多少会有出入,应以项目实际情况作为依据。
(该文档可以 .md 格式存放于项目根目录,或编写到readme 中)

项目描述

涉及如下方面

  • 项目背景 (可引用项目立项书)
  • 项目需求 (可引用产品文档,需求说明书,任务矩阵,UI 设计图,等)
  • 所用技术栈 (框架设计模式,语言或跨平台技术解决方案)

工程地址

git 或 svn 地址

框架图示

主要介绍架构分层,moduel 模块间依赖情况 (根据不同的框架设计模式而定,下图举例MVVM 组件化框架图示)

示例1
图示1
示例2
图示2

模块介绍

(下面以模块化框架为例,介绍各模块用途, 包含module 工程结构图,核心类加以说明)
app:

app壳 工程,是依赖所有组件的壳,该模块不应该包含任何代码,它只作为一个空壳存在,由于项目中使用了EventBusAPT技术,需要索引到各业务组件的对应的APT生成类,所以在 app壳 内有这一部分的代码。

buildSrc:

这是一个特殊的文件夹,负责项目的构建,里面存放着一些项目构建时用到的东西,比如项目配置,依赖。这里面还是存放 Gradle 插件的地方,一些自定义的 Gradle 的插件都需要放在此处。

lib_base:

项目的基础公共模块,存放着各种基类封装、对远程库的依赖、以及工具类、三方库封装,该组件是和项目业务无关的,和项目业务相关的公共部分需要放在 lib_common 中。

lib_common:

项目的业务公共模块,这里面存放着项目里各个业务组件的公共部分,还有一些项目特定需要的一些文件等,该组件是和项目业务有关系的。

com
└── domain└── app├── App.java 定义 Application 类├── Config.java 定义配置数据(常量)├── base 基础组件├── custom_view 自定义视图├── data 数据处理│   ├── DataManager.java 数据管理器,│   ├── local 来源于本地的数据,比如 SPDatabaseFile│   ├── model 定义 model(数据结构以及 getter/setter、compareTo、equals 等等,不含复杂操作)│   └── remote 来源于远端的数据├── feature 功能│   ├── feature0 功能 0│   │   ├── feature0Activity.java│   │   ├── feature0Fragment.java│   │   ├── xxAdapter.java│   │   └── ... 其他 class│   └── ...其他功能├── injection 依赖注入├── util 工具类└── widget 小部件

组件化相关

若用到组件化相关知识域,则介绍说明技术解决方案,

App 核心功能执行流程图

示例:登录 (UI 类执行流程)
示例:WebSocket 初始化,连接,重连,心跳等流程 (逻辑类执行流程)
图示
在这里插入图片描述

项目使用的三方库及其简单示例和资料

示例

  • OkHttp:网络请求

  • Retrofit:网络请求

  • MMKV:腾讯基于 mmap 内存映射的 key-value 本地存储组件

  • ARoute:阿里用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦

  • BaseRecyclerViewAdapterHelper:一个强大并且灵活的 RecyclerViewAdapter

  • EventBus:适用于 AndroidJava 的发布/订阅事件总线

  • Bugly:腾讯异常上报及热更新(只集成了异常上报)

  • PermissionX:郭霖权限请求框架

  • LeakCanary:Android 的内存泄漏检测库

  • AndroidAutoSize:JessYan 大佬的 今日头条屏幕适配方案终极版

屏幕适配 AndroidAutoSize

屏幕适配使用的是 JessYan 大佬的 今日头条屏幕适配方案终极版

GitHub: https://github.com/JessYanCoding/AndroidAutoSize

使用方式:

// 在清单文件中声明
<manifest><application> // 主单位使用dp 没设置副单位<meta-dataandroid:name="design_width_in_dp"android:value="360"/><meta-dataandroid:name="design_height_in_dp"android:value="640"/>           </application>           
</manifest>// 默认是以竖屏的宽度为基准进行适配
// 如果是横屏项目要适配Pad(Pad适配尽量使用两套布局 因为手机和Pad屏幕宽比差距很大 无法完美适配)
<manifest><application>            // 以高度为基准进行适配 (还需要手动代码设置以高度为基准进行适配) 目前以高度适配比宽度为基准适配 效果要好<meta-dataandroid:name="design_height_in_dp"android:value="400"/>           </application>           
</manifest>// 在Application 中设置
// 屏幕适配 AndroidAutoSize 以横屏高度为基准进行适配
AutoSizeConfig.getInstance().isBaseOnWidth = false

http://www.ppmy.cn/news/1365049.html

相关文章

【kubernetes】关于k8s集群的声明式管理资源

目录 一、声明式管理方法 二、资源配置清单管理 1、导出资源配置清单 2、修改资源配置清单并应用 2.1离线修改 2.2在线修改 三、通过资源配置清单创建资源对象 获取K8S资源配置清单文件模板&#xff1f; 关于配置清单常见的字段 方案一&#xff1a;手写yaml配置文件 …

QT C++实践|超详细数据库的连接和增删改查操作|附源码

0&#xff1a;前言 &#x1faa7; 什么情况需要数据库? 1 大规模的数据需要处理&#xff08;比如上千上万的数据量&#xff09;2 需要把数据信息存储起来&#xff0c;无论是本地还是服务上&#xff0c;而不是断电后数据信息就消失了。 如果不是上面的原因化&#xff0c;一般…

学习JAVA的第四天(基础)

目录 方法 方法的定义 方法的调用 参数 注意事项 方法的重载 练习 面向对象 类和对象 定义类的注意事项 封装 private关键字 this关键字 构造方法 标准的Javabean类 创建一个对象时&#xff0c;虚拟机做了什么&#xff1f; 方法 方法含义&#xff1a;方法是程序…

Node.js+vue校内二手物品交易系统tdv06-vscode前后端分离

二手物品交易系统采用B/S架构&#xff0c;数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写&#xff0c;使用了vue框架。该系统从三个对象&#xff1a;由管理员和用户、店铺来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对用户、店铺、二…

【面试题】在浏览器地址栏输入URL后会发生什么

1. 地址栏输入后的本地操作 当我们在浏览器的地址栏中&#xff0c;输入xxx内容后&#xff0c;浏览器的进程首先会判断输入的内容&#xff1a; 如果是普通的字符&#xff0c;那浏览器会使用默认的搜索引擎去对于输入的xxx生成URL。如若输入的是网址&#xff0c;那浏览器会拼接…

golang使用gorm操作mysql1

1.mysql连接配置 package daoimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger" )var DB *gorm.DB// 连接数据库&#xff0c;启动服务的时候&#xff0c;init方法就会执行 func init() {username : "roo…

binwalk安装记录和burpsuite安装记录

我的虚拟机环境是Ubuntu20.04 python有2.7的和3.8的 [[#binwalk|binwalk]] [[#binwalk#pip|pip]][[#binwalk#安装 sasquatch|安装 sasquatch]][[#binwalk#安装 jefferson|安装 jefferson]][[#binwalk#安装 ubi_reader|安装 ubi_reader]][[#binwalk#安装 yaffshiv|安装 yaffshi…

2.26作业

2.将信号灯集的函数二次封装 sem.c #include<myhead.h>union semun {int val; /* Value for SETVAL */struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */unsigned short *array; /* Array for GETALL, SETALL */struct seminfo *__buf;…