组件化改造-从零开始

1 ,抽分基础资源

2 ,基础库的设计

3 ,组件接口

4 ,组件拆分

5 ,路由设计

对比了几家组件化方案,还是决定这个最方便,就以此为基础,慢慢改造公司的项目

https://github.com/zhxhcoder/XJimuDemo

1 ,抽分基础资源

以项目为基础,与项目相关的基础资源

1,颜色资源

2,图片资源

3,自定义View

4,基础类,比如baseactivity等

。。。

2 ,基础库的设计

完全通用的模块或工具

1,网络请求框架

2,事件传递框架

3,。。。

。。。

3 ,组件接口

4, 具体步骤

详细步骤:

1:创建一个project,用创建project时自带的app module作为host项目

2:创建一个名为baselib的Android Library,用来放置公共类、工具类、以及一些公共的依赖等。

3:创建一个名为corelib的Android Library,用来放置公共类、工具类、以及一些公共的依赖等。

4:创建一个名为componentservice的Android Library,用来为app、read、share互相调用提供服务支持

5:创建read项目和share项目

6:让componentservice依赖baselib 和corelib,app、share、read都依赖componentservice,此时运行一下app、share、read,都能运行

7:配置工程下的build.gradle文件,注意,刚开始时先完全按照demo中的配置,等项目组件化做完之后,再根据自己的需求对不需要的引用进行删减;build.gradle文件配置完成后,com.dd.comgradle插件就已经引入到的项目中。

8:修改read、share、app的build.gradle中的apply plugin: 'com.android.application'为apply plugin: 'com.dd.comgradle',修改完后同步一下项目,会提示设置isRunAlone。

9:将工程下的gradle.properties文件复制到share和read项目的根目录下,并在share和read项目的根目录下的gradle.properties文件的最后一行加入isRunAlone=true

10:将工程下的gradle.properties文件复制到app项目的根目录下,并进行如下设置:isRunAlone=true debugComponent=read,sharecompileComponent=read,share设置完成后同步一下项目,会报错:Error:(1, 0) Could not get unknown property 'mainmodulename' for root project 'MyZuJianHuaDemo' of type org.gradle.api.Project.解决办法:在工程目录下的gradle.properties文件中添加mainmodulename=app,报错解决

(1)在read项目的main文件夹下创建runalone文件夹,在runalone文件夹下创建java文件夹,在java文件夹中创建runalone文件夹,在runalone文件夹下创建application文件夹,在application文件夹下创建ReadApplication类,并继承BaseApplication

(2)复制read项目的AndroidManifest.xml文件到runalone文件夹下,然后将runalone文件夹外的AndroidManifest.xml文件去掉intent-filter标签,即去掉其作为一个完整APP的入口,使read项目的入口变成runalone文件夹下的AndroidManifest.xml文件。

(3)对share项目进行同样的操作同步一下项目,不会报错

11:修改share项目和read项目的build.gradle文件

(1)修改share项目的build.gradle文件,在defaultConfig标签的最后添加: //此处的"share"是跳转URI中的host名称,每个组件需要设置不同的host。 javaCompileOptions { annotationProcessorOptions { arguments = [host: "share"] } }

(2)在android标签的最后添加:resourcePrefix "share_"

(3)在build.gradle文件的最后添加combuild { applicationName = 'application.ShareAppliaction' isRegisterCompoAuto = true}repositories { mavenCentral()}注意:application.ShareAppliaction是runalone文件夹下ShareAppliaction的路径

(4)在依赖中加入:annotationProcessor deps.jimu.router_anno_compiler,用于进行UI跳转

(5)对read项目进行同样的操作

12:在componentservice的build.gradle中加入:resourcePrefix common_"

13:修改app项目的build.gradle文件

(1)在defaultConfig标签的最后添加:javaCompileOptions { annotationProcessorOptions {arguments = [host: "app"] }} vectorDrawables.useSupportLibrary = true

(2)在android标签的最后添加: lintOptions {checkReleaseBuilds false// Or, if you prefer, you can continue to check for errors in release builds,// but continue the build even when errors are found:abortOnError false }

(3)在最后添加:combuild { applicationName = 'com.zhxh.xjimudemo.AppApplication' isRegisterCompoAuto = true}

14:设置applike文件夹

(1)在baselib中的build.gradle文件中添加依赖:compile deps.jimu.componentLib

(2)在share项目中创建applike文件夹,在该文件夹下创建ShareAppLike类实现IApplicationLike接口,并重写onCreate和onStop方法,

(3)在read项目中进行同样的操作

(4)在app项目中的AppApplication类中添加demo中对应的代码

15:在BaseActivity中的onCreate()方法中加入以下代码://依赖注入:如果想使用自动装载功能,需要在Activity的onCreate中调用方法AutowiredService.Factory.getSingletonImpl().autowire(this);

16:去掉read、share中的build.gradle中的applicationId,保留app中的applicationId15:在app项目的清单文件中的application标签中加上name字段,否则注册不了read和shareread和share的runalone文件夹中的清单文件也要在application标签中加上name字段

17:跳转到哪个Activity,就在runalone文件夹外的清单文件中对应的Activity中添加一下代码

18:添加卸载组件

//注意此处的参数为:该组件java文件夹下该类的全路径

Router.registerComponent("com.zhxh.share.applike.ShareAppLike");

Router.unregisterComponent("com.zhxh.share.applike.ShareAppLike");

19:将read组件作为host组件来调用share组件的方法

(1)在read组件的ReadApplication的onCreate()方法中注册share组件

Router.registerComponent("com.zhxh.share.applike.ShareAppLike");

(2)在read组件的gradle.properties文件中加入以下代码:

debugComponent=share

compileComponent=share

不加的话注册share组件不成功;注册share组件成功的标志是ShareAppLike类的onCreate()方法执行了

(3)此处要注意ReadApplication类的onCreate()方法有无执行,此处要注意:runalone下的java文件夹下不能直接创建

application文件夹,需要在这二者之间再创建一个文件夹进行分隔

20:注意:runalone文件夹内外的两个清单文件中都要声明activity

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,544评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,459评论 2 59
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,934评论 3 118
  • 我使用CocoaPods安装。如果CocoaPods不会安装自行查方法吧,东西比较多,本文不做赘述。 iOS安装C...
    高谈阔论阅读 443评论 0 0
  • 爱谁谁, 浪迹天涯终究是命。 大家新年快乐,元旦小假期是否有出去走走看看呢?俗话说读万卷书不如行万里路,你看见的人...
    沙滩上的金毛阅读 650评论 1 5