Android 框架设计模板

不同项目在使用该模板时多少会有出入,应以项目实际情况作为依据。

(该文档可以 .md 格式存放于项目根目录,或编写到readme 中)

项目描述

涉及如下方面

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

工程地址

git 或 svn 地址

框架图示

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

示例1

示例2

模块介绍

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

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

buildSrc:

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

lib_base:

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

lib_common:

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

java 复制代码
com
└── domain
    └── app
        ├── App.java 定义 Application 类
        ├── Config.java 定义配置数据(常量)
        ├── base 基础组件
        ├── custom_view 自定义视图
        ├── data 数据处理
        │   ├── DataManager.java 数据管理器,
        │   ├── local 来源于本地的数据,比如 SP,Database,File
        │   ├── 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:郭霖权限请求框架

  • LeakCanaryAndroid 的内存泄漏检测库

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

屏幕适配 AndroidAutoSize

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

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

使用方式:

// 在清单文件中声明
<manifest>
    <application> 
    // 主单位使用dp 没设置副单位
        <meta-data
            android:name="design_width_in_dp"
            android:value="360"/>
        <meta-data
            android:name="design_height_in_dp"
            android:value="640"/>           
     </application>           
</manifest>

// 默认是以竖屏的宽度为基准进行适配
// 如果是横屏项目要适配Pad(Pad适配尽量使用两套布局 因为手机和Pad屏幕宽比差距很大 无法完美适配)
<manifest>
    <application>            
    // 以高度为基准进行适配 (还需要手动代码设置以高度为基准进行适配) 目前以高度适配比宽度为基准适配 效果要好
        <meta-data
            android:name="design_height_in_dp"
            android:value="400"/>           
     </application>           
</manifest>

// 在Application 中设置
// 屏幕适配 AndroidAutoSize 以横屏高度为基准进行适配
AutoSizeConfig.getInstance().isBaseOnWidth = false
相关推荐
曾经的三心草2 小时前
Mysql之约束与事件
android·数据库·mysql·事件·约束
guoruijun_2012_45 小时前
fastadmin多个表crud连表操作步骤
android·java·开发语言
Winston Wood6 小时前
一文了解Android中的AudioFlinger
android·音频
B.-7 小时前
Flutter 应用在真机上调试的流程
android·flutter·ios·xcode·android-studio
有趣的杰克7 小时前
Flutter【04】高性能表单架构设计
android·flutter·dart
大耳猫13 小时前
主动测量View的宽高
android·ui
帅次15 小时前
Android CoordinatorLayout:打造高效交互界面的利器
android·gradle·android studio·rxjava·android jetpack·androidx·appcompat
枯骨成佛16 小时前
Android中Crash Debug技巧
android
kim565921 小时前
android studio 更改gradle版本方法(备忘)
android·ide·gradle·android studio
咸芝麻鱼21 小时前
Android Studio | 最新版本配置要求高,JDK运行环境不适配,导致无法启动App
android·ide·android studio