组件化踩坑记录(二)

组件化项目 构建一个demo,之后会开始封装各种框架以及遇到的问题

一 组件化项目application 问题

模块共有的初始化,放入BaseApplication 中。
模块自身的特殊功能初始化,放在自己的 Application。

首先是 组件化目录

	appdemo
	      ------app
	      ------.gradle
	      ------.idea
	      ------build
	      ------moduleA                //各自配  build.gradle  是否作为组件还是单独运行
	      ------moduleB              //AndroidManifest.xml  需要配多一分在module目录下  如下图
	      ------.gitignore
	      ------config.gradle              --->所有配置的文件都在这
	      ------build.gradle                -----》在这引用config.gradle 
	      ------gradle.properties
	      ------gradlew
	      ------settings.gradle
	      ...
Sample

其中 在moduleA 的 build.gradle 下的

 android{
...
//java插件引入了一个概念叫做SourceSets,通过修改SourceSets中的属性,可以指定哪些源文件
//( 或文件夹下的源文件 ) 要被编译 , 哪些源文件要被排除 。
sourceSets {
    main {
        if (Boolean.valueOf(rootProject.ext.isModule)) {
            manifest.srcFile 'src/main/module/AndroidManifest.xml'
        } else {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java {
                //排除java/debug文件夹下的所有文件
                exclude '*module'
            }
        }
    }
}


}

结合上一篇文章来看 一个基本的demo (只是app的目录结构) 就构建完成了

下面就是common 基础库的封装抽取了

首先我们会抽取

baseApplication 这是大家在构建一个项目时都会做的事

初始化application 重复的东西就不说了

我们在实现application初始化的时候 我们也要把每个组件的 需要的初始化的东西也一并初始化了

但是我们知道 一个app里只会存在一个application ,而在app创建的时候我们每个组件都需要初始化自己的东西,那怎么办呢

方法有2

1.创建base module。该module提供基础类库。所有初始化都在baseapplication实现

2.创建BaseApplication类,ModuleConfig类以及BaseApplicationImpl类。BaseApplication类的onCreate()方法中初始化一些全局配置并且初始化模块配置。BaseApplicationImpl类是一个接口类,需要各模块自己去实现各个模块的配置。这些配置的类是定义在ModuleConfig中,在初始化的时候会通过反射创建这些类。

创建一个接口

interface IComponentApplication {
    fun init(application: Application)
}

moduleA中

open class Main_App :Application(), IComponentApplication  {
    private lateinit var daoSession: DaoSession
    private lateinit var context: Context
    private lateinit var application: Application
    companion object {
        private var instance: Main_App? = null

        fun instance() = instance!!
    }


    override fun init(app: Application) {

        LogUtils.e("main  chu shi   hua  .... ")

        instance =this
        application=app
        context=app.applicationContext
        initgreendao(app)
    }
 }
...   

在modulecommon中 的baseapplication 下

oncreate(){

moduleApplicationInit(this)

}

在这里插入图片描述

以上是组件化 application 解决方式 通过反射的方式实现

二 路由通信

使用Arouter 解决

组件化知识梳理(1) - Arouter 的基本使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值