android项目重构

作者: 小石头姐姐和码农爸爸 | 来源:发表于2017-09-30 10:44 被阅读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

    相关文章

      网友评论

        本文标题:android项目重构

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