架构Android开发程序员首页投稿

android项目重构

2017-09-30  本文已影响0人  小石头姐姐和码农爸爸

声明:里面的一些图片来自网络,如果有版权问题,我可以删掉

最近在公司主导android项目重构,一下是这次重构中的一些总结,里面包括android项目如何架构,采用什么样的开发模式,都有简略的阐述,分享出来,希望对那些从事android开发的同学有一定的帮助。

当然里面有写的不正确的地方,希望大家可以给我留言,技术是需要探讨,不断学习的过程,没有所谓的最好,只有更好,根据不同的android项目,项目架构也需要做调整,没有一个统一的架构可以适合所有的项目,架构只有是否适合你的项目,没有所谓的对与错。

目前大部分android项目,网络访问和图片显示比较平凡,所以数据访问和图片加载是重点,也是容易导致app oom的地方。

目前大部分公司采用的是组件化开发和插件化开发

组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。

插件化开发和组件化开发略有不用,插件化开发时将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk(组件化的每个模块是个lib),最终打包的时候将宿主apk和插件apk分开或者联合打包。

插件化开发,增加了主应用程序的逻辑难度,技术有难度,目前一些成熟的框架都是闭源的,插件中资源的加载问题,不能很好的解决。里面坑也非常多。

综上所述我认为我们还是采用组件化开发。

大部分android项目是一个数据,业务,显示非常清晰的项目,项目架构,我们采用三层架构,三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer),项目采用MVP模式。、

三层架构和mvp模式

整个项目可以分成以下几个部分:

Presentation:负责展示图形界面,并填充数据,该层囊括了View和Presenter。

Domain:负责实现app的业务逻辑,该层中由普通的Java对象组成。

Data:负责提供数据,Android开发中常见的数据来源有,RestAPI、SQLite数据库、本地缓存等。

Library:负责提供各种工具和管理第三方库,现在的开发一般离不开第三方库,这里建议在统一的地方管理(那就是建一个单独的module),尽量保证和Presentation层分开。

各个library的关系

Androidstudio project结构如图(主体module,根据项目可以扩充):

主体module

包结构图如下:

主要包结构

组件化开发比较难解决的问题是页面导航和各个组件之间的通信问题。

页面导航问题,一般要解决一下几方面的需求

1.从外部URL映射到内部页面,以及参数传递与解析

2.跨模块页面跳转,模块间解耦

3.跨模块API调用,通过控制反转来做组件解耦

引用ARouter页面路由框架或者自己写NavigationManager(主要原理Activity的显示调用,隐式调用,uri相结合来进行匹配跳转页面)

组件间通信方式:

1、intentactivity之间的通信

2、Binder activity绑定service

3、Broadcast通信

4、application,sharepreence,文件存储,数据库,contentprovider

5、使用接口,观察者模式,耦合性比较高,接口越来越多,维护比较麻烦

6、socket通信

7、EventBus

前面6种如果用到组件间通信,或多或少都有一定的局限性,自己比较建议使用EventBus来做组件之间的通信,并且目前项目中也在使用,不过使用要有一定的规则,不然导致项目混乱。

因为现在项目中一般会大量引用第三方库,所以挑选第三方库的一些建议

1.项目中确实需要

2.使用的人要多

3.效率和体量的权衡

第三方库尽量二次封装

为了方便更换,有很多原因可能需要你替换项目中的第三方库,这时候如果你是经过二次封装的,那么很简单,只需要在封装类中修改一下就可以了,完全不需要去全局检索代码。

我曾经的项目就有过替换第三方库的经历:

1.替换项目中的统计埋点工具

2.替换网络框架

3.替换日志工具

网络框架使用的是:retrofit+RXjava+okhttp3,这个相对性能,稳定性还是比较高的,建议做优化和二次封装。

图片加载框架使用的是:andriod-universal-image-loader,presco,picasso等做二次封装。

等等还有很多优秀第三方框架,你可以按需引用。

关于整体项目代码,因为涉及公司的机密,不能放出来请大家见谅。

下面是我平时积累的github上star比较多的,项目中也大量使用的,现在放出来给大家分享,架构师需要大量阅读别人的架构思想。如果有需要的可以去github上直接搜索下载。

框架总结

网络框架

Retrofitokhttpdroid-async-httpvolley

图片框架

Glideandriod-universal-image-loaderpicassopresco

数据库框架

Realm-java

图标框架

Mpandroidchart

内存框架

Leakcnary

事件消息框架

eventBus

条码扫描框架

zxing

动画框架

Lottie-androidMaterial-animationsandroidviewanimationsrecyclerview-animatorslistviewanimationstransitions-everywhere

异步框架

Rxjavaagera

UI框架

Material-dialogsviewpagerindicatorflexbox-layoutandroidswipelayout

BaseRecyclerviewadapterhelperandroid-observablescrollviewandroidslidinguppanel

appintroandroid-bootstarp

菜单框架

slidingMenuMaterialDrawerbottmbar

注解框架

Androidannotations

json框架

Fastjson

热修复框架

Tinkerdexposed

架构框架

Android-cleanarchitecture

刷新框架

android-pulltorefresh

数据框架

greenDAO

调试框架

StethologgerAndroidWiFiADBAndroid-Debug-Database

字体框架

Calligraphy

依赖注入框架

Dagger

响应式框架

RxBindingOtto

用例框架

RxJava-Android-Samplesu2020androidmvp

适配框架

AndroidAutoLayout

性能框架

EffectiveAndroidUILitho

插件化框架

DroidPlugindynamic-load-apkatlasSmall

构建框架

buck

权限框架

PermissionsDispatcherRxPermissions

GIF框架

android-gif-drawable

反编译框架

Apktoolclassyshark

手势框架

SwipeBackLayout

测试框架

Android-testingrobolectric

下载框架

FileDownloader

多媒体框架

JieCaoVideoPlayer

编译框架

Freeline

生命周期框架

RxLifecycle

崩溃日志框架

acraCustomActivityOnCrash

文件框架

DiskLruCache

MVP框架

Mosby

混淆框架

AndResGuard

状态栏框架

StatusBarUtil

嵌套框架

Fragmentation

hybrid(混合开发)框架

JsBridge

勋章框架

android-viewbadger

表情包框架

emojicon

多渠道框架

Packer-ng-plugin

多线程框架

Android-priority-jobqueue

加密框架

conceal

页面路由框架

ARouter

多主体框架

MagicaSakura

键盘框架

XhsEmoticonsKeyboard

上一篇下一篇

猜你喜欢

热点阅读