记录一下新项目的搭建。

试想一下,如果没有历史负担,没有KPI压力,去新搭建一个项目,你会怎么设计和实现呢?

本系列文章不是教你怎么从0开始学Android,从0开始怎么建一个项目,而定位于零负担的情况下,在2016年怎么去创建一个好的Android项目,其中一部分技术并不太适合刚入门的初学者。

Application specific

类似clean architecture,分为三层 presentation - data - domain。

关于Clean Architecture由于国内的一些文章和项目都多少有偏离和错误,建议直接看

两篇文章。

domain为纯领域模型,是Java library,包含了use case(Interactor)、DO、repository接口等domain package,目标是在任何Java语言的平台上都能直接使用,所以必须是平台无关,对平台没有任何依赖,能使用Java的方法(JUnit + Mockito)来直接进行测试。

data为domain的实现,是Android library,从MVP的角度来说,即是M层,内部隐藏所有数据细节,cache、数据库、网络、PO、exception(根据业务特点自定义的exception)、repository的具体实现(内部屏蔽数据细节,可能来自网络、数据库、缓存等)。使用Robolectric 3 + JUnit + Mockito进行集成测试。

presentation即展示层,是Android application module,对data不存在实际感知,依赖仅仅是Dagger注入的实例化,所有访问都通过接口进行,可见的是domain里的接口。包含了error message factory(所有exception都会被factory生成对应的message)、DI、mapper(vo转换)、VO(data binding进行MVVM)、navigation、presenter(不强制,仅在一些特别复杂的场景引入)、usersystem、utils(业务相关)、view(activity、fragment、adapter等)、application实现、业务常量等。可以使用Espresso和Android Instrumentation进行UI测试。

整个项目类似MVP+MVVM的混合(谁跟你说的MVP和MVVM是互斥的?),不过P层不一定存在,以避免为了模式而模式所导致的开发压力。

Common libraries

aar依赖以避免对编译速度造成影响,不过这里比较巧妙的是依赖作为module引入,所以当需要源码依赖的时候在build.gradle里进行注释/反注释就能迅速切换,十分方便。

lib_uiframework: UI framework,包含了各种Base类,如BaseActivity、BaseFragment、Navigator(应用中的一切通过scheme跳转)、ActivityManager、FragmentBackHelper等。

lib_uikit: 各种自定义view、第三方view的gradle或者源码依赖。

lib_im: 即时通讯库。

lib_component: 组件库,如cache、gif、ClassLoaderInjecter、Log、SP、Web等。

lib_authorize: 第三方认证(登陆),目前包括QQ、微信、微博、LinkedIn。

lib_share: 第三方分享,目前包括QQ、微信、微博。

…等等

Third party libraries

Dagger, jsr250: 依赖注入框架让我们省了很多代码,jsr250则是Dagger注入时的一个annotation根据,我们的domain依赖了jsr250。

Rx大家族: RxJava, RxAndroid, RxBinding。新时代Android开发必备,还用说吗?

Retrofit: 装逼,喔,不对,高效率开发必备的网络框架。使用注解生成API,方便极了。我这里的实践是根据业务划分多个API接口,然后通过Dagger module进行实例化注入。

EventBus: 有了RxJava还要EventBus?当然,事件并不总是一对一的,也不总是流式的(可能是持续被动的)。举个简单的例子,feed详情信息更新后(比如点赞数据),外部可能有2个timeline页面也需要更新这个数据,这个时候EventBus就可以优雅地进行事件广播。

Realm:一个不依赖于SqlLite的ORM库,特点就是…快。还有同时有多个平台的方案: ReactNative, OC, Swift, Java…

Google Support库, data binding: Google家的,不用说了吧。

LeakCanary, BlockCanary: 开发阶段必备工具,前者是square家检测内存泄露的,后者是我自己做的卡顿检测工具。

Glide, Glide Transformation: 不折腾fresco,乖乖用Glide。

转载:http://blog.zhaiyifan.cn/2016/03/14/android-new-project-from-0-p1/

从零开始的Android新项目1 - 架构搭建篇的更多相关文章

  1. fir.im Weekly - 从零开始创建 Android 新项目

    今年的 Google I/O 大会上,人工智能和虚拟现实的产品发布让我们对未来多了几分惊喜.对于开发者部分,Google 发布了 Android N 系统,感受最深的是全新的 Android Stud ...

  2. Android新项目GBSS:第1篇 搭建开发环境

    最近接手一个Android新项目,之前也没做过这方面的开发,算是边学边干,这两天看了一下Android开发的书,大致入门了一点,今天把所需要的软件都下了下来,准备开工,先列一下开发环境: 所有的软件都 ...

  3. <正则吃饺子> :关于新项目的环境搭建(一)

    来到新的公司,需要使用myeclipse.maven.svn.tomcat.mysql: 对于先前一直只用 netbeans 的我,在这里把环境搭建 的情况记录下来.来加深自己的学习和帮助后来者. 第 ...

  4. 从零開始的Android新项目7 - Data Binding入门篇

    Data Binding自从去年的Google I/O公布到至今,也有近一年的时间了.这一年来,从Beta到如今比較完好的版本号.从Android Studio 1.3到如今2.1.2的支持,能够说D ...

  5. 创建一个ArcGIS for Android 新项目并显示出本地的地图

    1.准备工作:首先要配置好android的开发环境,然后在Eclipse中安装ArcGIS for Android的开发控件:在ArcCatalog中发布好本地的地图服务. 2.安装完ArcGIS f ...

  6. 从零开始学android开发-项目打包发布

    右键项目 选择[android tools]-[export signed application package] 点击[next] 如果没有keystore可以选择[create new keys ...

  7. 从零开始学android开发-项目重命名

    --修改项目名称 选中项目-[refactor]-[rename] --修改package名称 选中需要重命名的包-[refactor]-[rename] --修改gen下面的名称 打开Android ...

  8. 从零开始学android开发-项目debug

    在红框处能看到变量值

  9. Android开源项目发现---TextView,Button篇(持续更新)

    android-flowtextview 文字自动环绕其他View的Layout 项目地址:https://code.google.com/p/android-flowtextview/ 效果图:ht ...

随机推荐

  1. 03_Swift2基础之基本数据类型+相互转换

    1. 整数 整数就是没有小数部分的数字,比如`42`和`-23`.整数可以是`有符号`(正.负.零)或者`无符号`(正.零). Swift 提供了,,和位的有符号和无符号整数类型.这些整数类型和 C语 ...

  2. BZOJ4657 : tower

    显然只有横向和纵向的两个炮塔才有可能冲突. 考虑最小割,将每个炮塔所有能攻击到的位置建点,相邻之间连无穷的边,表示前缀和关系,即选了一个点,就必须要选所有比它近的点. 属于横向炮塔的点向$S$连边,容 ...

  3. Javascript的console.log()用法

    Firebug & Chrome Console 控制台的一些其他功能console.log(object[, object, ...])使用频率最高的一条语句:向控制台输出一条消息.支持 C ...

  4. [知识点]Tarjan算法

    // 此博文为迁移而来,写于2015年4月14日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxnx.html UPD ...

  5. 直接用Qt写soap

    直接用Qt写soap 最近的项目里用到了webservice, 同事用的是`gSoap`来搞的. 用这个本身没什么问题, 但这货生成的代码实非人类可读, 到处都是`__`和`_`, 看得我眼晕.... ...

  6. zabbix3.2.0beta2 监控模版

    Zabbix监控中用到了一系列模版,nginx后端检测状态 微信告警等一系列常规的服务应用监控 memcached监控模版,可以自己重新定义memcached的端口 http://files.cnbl ...

  7. 内置函数----整理、例题 、xmin

    -----------数值函数 ---绝对值 select abs(-123) from dual; --求模 select mod (12,5) from dual; --取整 --上限值 sele ...

  8. 第1章 Bootstrap介绍

    学习网址:http://www.bootcss.com/ 下载网址:http://v3.bootcss.com/ 下载后一共三个文件夹 css js fonts 引入的文件 <link rel= ...

  9. ZK tree使用mold

    前台Tree.zul <?page title="Tree使用" contentType="text/html;charset=UTF-8"?> & ...

  10. ASPCMS标签教程

    导航栏调用{aspcms:navlist type=0}    <a href="[navlist:link]">[navlist:name]</a>{/a ...