Android组件化demo实现以及遇坑分享
首先贴出demo的github地址:GitHub - TenzLiu/TenzModuleDemo: android组件化demo
作者:TenzLiu
原文链接:https://www.jianshu.com/p/416ca689ebc2
前言
前段时间看到最近一直很火的Android组件化然后就自己撸了一个demo,期间遇到了不少问题以及坑,在此记录一下,具体可以看项目源码。
组件化无非就是将我们App项目下的几个模块在com.android.application与com.android.library之间切换。如下图:分为modulelib(类库模块,一些基本工具类),modulemain(入口模块),moduleone(模块1),moduletwo(模块2),而App只是担当一个空壳工程。
1:新建一个Android项目,但是这个App只是一个空壳工程
2:接下来就是创建这几个module了,先都是以Android Library就行,然后就是在每个module的build.gradle下面修改
注意以为mudulelib只是作为一个根据库,所以不需要改,然后就是isModule从何而来,就是在整个项目的gradle.properties
3:App项目App以及各个module之间的一来关系:
首先modulelib是负责引用一些第三方类库以及一些基本代码的负责和一些工具类
App:
就是说当设置isModule=true的话各个模块处理modulelib都可以独立运行测试,也就是可以交给多人分开开发,最后只需要设置false就可以合并
各个模块的module:
在这里需要注意,modulelib的引用类库我们使用的是api,而不是implementation,因为implementation只能在本module有效,但是你去到如App那里就无效了;有一些类库引用是只有的比如butterknife:
implementation'com.jakewharton:butterknife:8.8.1'
annotationProcessor'com.jakewharton:butterknife-compiler:8.8.1'
implementation我们需要在modulelib里面,但是annotationProcessor却需要在各个module里面都要写上。
4:项目App怎么以modulemain为入口:
这里注意我们的App下面的minifest是没有activity的
而在modulemain的minifest下面有一个声明作为launcher的activity
这个程序已启动就会运行modulemain下面的MainActivity了。
5:各个module之间的交互怎么处理呢,比如一些activity的跳转,还有不同欧冠module之间获取fragment,这个上面也应该看到我是用的阿里的ARouter路由了,用法也很简单,官方链接:https://github.com/alibaba/ARouter。
如上面所说,在modulelib引用api'com.alibaba:arouter-api:1.3.1',然后在各个module下面annotationProcessor'com.alibaba:arouter-compiler:1.1.4'
然后在各个模块的build.gradle下的defaultConfig下添加
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName :project.getName() ]
}
}
这个官方文档有说明的。
然后就是使用了,在module需要跳转的activity或是需要获取的fragment设置
接下来就是跳转了,
至于fragment也是一样,
以及fragment的获取
6:在module里面的资源id在switch,case无法使用:
可以使用if,else代替
7:butterknife的使用问题
相信很多人都会用到butterknife注解,但是在module使用bb utterknife也会有坑,
如上面所说,在modulelib引用api'com.jakewharton:butterknife:8.5.1',然后在各个module下面annotationProcessor'com.jakewharton:butterknife-compiler:8.5.1'
在butterknife官方文档也有说明,如果是在module里面使用的话还要在各个module添加
applyplugin:'com.jakewharton.butterknife'
当然modulelib不需要,但是当你使用butterknife最新版8.8.1的时候就会因为这个报错,我也是在这里搞了很久马波的,原来是butterknife最新版不兼容的问题吧应该,只需要调低版本就好了,我这里是用了8.5.1
module使用butterknife还有一个R资源的问题,就是你butterknife注解使用的资源不能用R,而是要用butterknife提供的R2来寻找资源

8:之前说了每个module在设置isModule=true之后就可以单独运行调试了,那这个的monifest也需要有两套吧,
资源文件:
再来看看内容对比
剩下就撸码吧。
完~
作者:TenzLiu
原文链接:https://www.jianshu.com/p/416ca689ebc2
阅读更多
相信自己,没有做不到的,只有想不到的
在这里获得的不仅仅是技术!
Android组件化demo实现以及遇坑分享的更多相关文章
- Android组件化方案
Android组件化项目地址:Android组件化项目AndroidModulePattern Android组件化之终极方案地址:http://blog.csdn.net/guiying712/ar ...
- 从零开始搭建Android组件化框架
问题 在已经开发过几个项目的童鞋,如果这时需要重新开发一个新项目,是否需要自己重新搭建框架呢,还是从老项目中拷贝粘贴? 我们是否可以封装一个底层的lib库,这个底层的公共基础库 包括了一些第三方库(如 ...
- Android组件化之终极方案
Android组件化项目地址:Android组件化项目AndroidModulePattern Fragment或View如何支持组件化 如何管理组件 Fragment或View如何支持组件化 距离 ...
- 教你打造一个Android组件化开发框架
*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 CC:Component Caller,一个android组件化开发框架, 已开源,github地址:https://github ...
- Android 组件化最佳实践 ARetrofit 原理
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/TXFt7ymgQXLJyBOJL8F6xg作者:朱壹飞 ARetrofit 是一款针对Android ...
- Android组件化
附:Android组件化和插件化开发 App组件化与业务拆分那些事 Android项目架构之业务组件化 Android组件化核心之路由实现 Android组件化开发实践
- Android 组件化/模块化之路——在展示层搭建MVP结构
Android 组件化/模块化之路——在展示层搭建MVP结构 什么是MVP Model–View–Presenter (MVP) 源于 Model–View–Controller (MVC) 的结构设 ...
- Android组件化框架设计与实践
在目前移动互联网时代,每个 APP 就是流量入口,与过去 PC Web 浏览器时代不同的是,APP 的体验与迭代速度影响着用户的粘性,这同时也对从事移动开发人员提出更高要求,进而移动端框架也层出不穷. ...
- 我所理解的Android组件化之通信机制
之前写过一篇关于Android组件化的文章,<Android组件化框架设计与实践>,之前没看过的小伙伴可以先点击阅读.那篇文章是从实战中进行总结得来,是公司的一个真实项目进行组件化架构改造 ...
随机推荐
- 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
[转]作者:xwdreamer 出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...
- python中的深拷贝和浅拷贝
python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一 ...
- web渗透测试基本步骤
基本常见步骤: 一 .信息收集 要检测一个站首先应先收集信息如whois信息.网站真实IP.旁注.C段网站.服务器系统版本.容器版本.程序版本.数据库类型.二级域名.防火墙.维护者信息有哪些等等 ...
- TensorFlow从入门到理解(三):你的第一个卷积神经网络(CNN)
运行代码: from __future__ import print_function import tensorflow as tf from tensorflow.examples.tutoria ...
- 5.21http网页基础
1,HTML的由来: web网页开发的标准,由w3c万维网联盟组织制定的.是制作网页的规范标准,分为结构标准.表现标准.行为标准.结构:html.表现:css.行为:Javascript. 2,htm ...
- 判断GPS是否开启&转到设置GPS界面
/** * 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的 * @param context * @return true 表示开启 */ public static final boo ...
- js中创建数组,并往数组里添加元素
数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长 ...
- 解决Ubuntu 18.04中文输入法的问题,安装搜狗拼音
首先安装fcitx一.检测是否安装fcitx首先检测是否有fcitx,因为搜狗拼音依赖fcitx> fcitx提示:程序“fcitx”尚未安装. 您可以使用以下命令安装:> sudo ap ...
- ActiveMQ常见消息类型
JMS由下面三部分组成:消息头.属性.消息体.其中消息体定义了五种消息体格式,也可以称为消息类型. JMS规范中的消息类型包括TextMessage.MapMessage.ObjectMessage. ...
- 使用WireMock快速伪造RESTful服务
⒈下载WireMock独立运行程序 http://wiremock.org/docs/running-standalone/ ⒉运行 java -jar wiremock-standalone-2.2 ...