android项目重构

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

最近在公司主导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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,049评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,943评论 4 60
  • 今日天气良好,空气质量尚可,微风,刺鼻气味不是很明显。在经历了几次忽高忽低的温度后,现在似乎有那么点春暖的意境了...
    GHL的一禾阅读 335评论 0 0
  • 好久没记事了,打开一看吓一跳,17年到目前为止只写了一篇月结! 4月份,我发现我每年四月份都不得安生,情绪会低落,...
    Anitis阅读 196评论 0 0
  • 看着桌子对面的韩司睿,苏筱还有些恍惚,“你怎么会来?” 韩司睿正在洗碗筷的手一顿,抬眼看去,就发现可能因为室内空调...
    风眠花未歇阅读 210评论 0 0