Android 组件化 (二)之重要的Application和Androidmanifest.xml

接着Android 组件化(一)之入门 回答一下大婶的问题

Androidmanifest.xml 的改动

Androidmanifest.xml 是有改动的,集成模式和组件模式是有相对较大的却别的,因为在集成模式中我们只需要一个launch的Activity ,是不允许出现多个launch和多个Application的 也不能出现多个图标啊 lable啊 等属性,
我们先看一下集成模式下的Anroidmanifest.xml
我们在图说过
图一

项目壳中我们将上述在组件中不能有的属性全部申明在项目壳中的Androidmanifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.beastwars.componentizationdemo">
    <application
       android:name="com.beastwars.componentizationdemo.MainApplication"
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:roundIcon="@mipmap/ic_launcher_round"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
    </application>
</manifest>

在这个Androidmanifest.xml中不做组件中Activity的申明

然后在组件中的src/main/Androidmanifest.xml 中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.beastwars.module_main">
    <application android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Main2Activity"></activity>
    </application>
</manifest>

⚠️:组件中集成模式下的androidmanifest.xml 的application节点是没有上述不能出现的属性的,当然我在这里放置了自己的启动类和组件中的类的申明

再看一下组件模式src/main/module/androidmanifest.xml 中是和平时一样的

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.beastwars.module_test">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".TestActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

集成模式和组件模式下的Context

好的 Androidmanifest.xml 就设计完了,接下来我们考虑一下,在Android运行的时候我们的程序是不是会创建一个Application 并且只会创建一个,他在整个程序中的声明周期是最长的,默认情况下程序是自动创建的,只有在自定义的时候并且是在Androidmanifest.xml中申明之后才会创建我们自定义的Application,那这个有什么冲突呢?在组件化开发的时候,我们可能可能回在每个组件中申明一个自己的Application,但是程序咋集成模式的时候只需要一个Application,所以必须找一个全局的Application用来提供Context

Android组件化(一)中我写过组件化过程中使用到的名词,有一个通用组件,我们就在这个组件中建设一个BaseApplication 作为所有Application的基类,主要用作集成模式下,在组件模式下,还是各自建设自己的Application 并且在build.gradle中进行申明

这里写图片描述

圈中的是组件自己使用的Application

然后在build.gradle中申明

sourceSets {
        main {
            if (isComponent.toBoolean()) {
                manifest.srcFile 'src/main/moudle/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
                //这个申明的时候不是像Androidmanifest.xml这样 而是在集成模式的时候将我们这个包中的类文件排除
                java {
                    exclude 'component/**'
                }

            }
        }
    }

Library

一般我们是将依赖放在我们的通用组件中,但是如果出现像组件模式图中某个业务组件即使用通用组件,有单独添加了一个自己的组件,那在集成模式的时候会出现什么问题呢?
对,老表说的对,很大可能会出现的就是依赖重复,我们常见的就是添加完依赖之后v4 包提示重复了,很头疼,那怎么办呢?问得好!
gradle提供了解决的方法 就是根据组件名或者包名排除重复包 看一下代码

//排除v4包重复
implementation("com.jude:easyrecyclerview:$rootProject.easyRecyclerVersion") {
        exclude module: 'support-v4'
    }

到目前为止,组件化的中出现的基本问题都已经解决了,之后我们就要让每个组件跑起来,

  • 那么是什么驱使他们集成在一起调用?

Android 组件化(三)之组件间的通信
- 又是是什么让整个项目一目了然?

Android 组件化(四)之集成模式中的重构

猜你喜欢

转载自blog.csdn.net/qq_32648731/article/details/80693802
今日推荐