Android 组件化 修改新建Module的各种配置

一.说明

 

按照上一章节,新建的module会有自己的默认配置。为了组件化的开发,我们需要修改这些配置。

Android 组件化 从零创建一个组件化的项目

https://blog.youkuaiyun.com/weixin_37730482/article/details/70239680

 

 

 

 

 

 

二.Module的AndroidManifest.xml修改

 

1.项目截图

即 该Module我们先创建了两个Activity。我们看一下清单文件的修改。

 

 

2.默认的清单文件

新建的Module,会生成一个默认的清单文件,如下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wjn.component.base">

    <!--该Module单独运行时使用的清单文件 相当于一个独立的项目-->
    <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/Theme.ComponentDemo">
        <activity android:name=".BaseMainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".BaseTestActivity"/>
    </application>

</manifest>

 

 

3.说明

作为一个单独的项目,这样的清单文件我们是再熟悉不过了,也是最正常的清单文件的配置。但是组件化中,这样显然是不可以的。因为组件化中每个Module的清单文件最后都是要合并的。所以需要修改。但是因为每一个Module又可以当成是一个单独的项目,那这个清单文件就是可以的了。

那也怎么操作呢?我们可以再新建一个清单文件。当此Module作为项目的组件使用时,使用组件该有的清单文件。当此Module作为单独的项目时,使用正常的清单文件。

 

 

4.具体修改

新建一个文件夹 存放单独运行时的清单文件,截图如下

 

module文件夹中存放的清单文件,就是默认生成的清单文件。作为该Module单独运行时使用。

常规文件夹中存放的清单文件,是修改后的清单文件。作为该Module作为壳工程的一部分运行时使用。内容如下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wjn.component.base">

    <application>
        <activity android:name=".BaseMainActivity" />
        <activity android:name=".BaseTestActivity" />
    </application>

</manifest>

即 仅仅是注册了该module中的四大组件,这里仅仅使用了两个Activity。

 

到这里,我们就完成了清单文件的修改。即 相比普通的项目,我们新建了一个文件夹存放清单文件,然后将默认生成的清单文件修改成组件化可用的清单文件。那么该module什么时候单独运行,什么时候作为Module运行?以及如何加载不同文件夹中的清单文件呢?这就需要我们配置Gradle文件来完成。

 

 

 

 

 

 

 

 

三.Module的build.gradle修改

 

1.自定义Gradle文件myConfig.gradle放在项目的根目录

myConfig.gradle文件内容

ext {
    /** true 每个业务Module可以单独开发 false 每个业务Module以lib的方式运行 */
    isComponentBaseModule = true//Base组件
    isComponentUIModule = false//UI组件
}

 

 

 

2.项目的Gradle文件配置刚刚新建的Gradle文件

apply from: "myConfig.gradle"
 
 
buildscript {
   ...
}
 
allprojects {
    ...
}
 
task clean(type: Delete) {
    delete rootProject.buildDir
}

这样,我们就可以使用新建的Gradle文件中的变量控制Module什么时候单独运行,什么时候作为组件运行了。那么这个变量在什么地方使用,以及加载不同的文件夹中的清单文件怎么操作呢?需要修改该Module的Gradle文件。

 

 

 

3.Module的Gradle文件修改

/** 修改处1:根据isComponentBaseModule字段 决定该Module的产物*/
if (Boolean.valueOf(rootProject.ext.isComponentBaseModule)) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}



android {
    compileSdkVersion 30

    defaultConfig {

        /** 修改处2:根据isComponentBaseModule字段 决定是否可以有applicationId 只有单独运行时才可以有applicationId*/
        if (Boolean.valueOf(rootProject.ext.isComponentBaseModule)) {
            applicationId "com.wjn.component.base"
        } 
        
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }



    /** 修改处3:sourceSets闭包 配置不同文件夹的清单文件 根据isComponentBaseModule字段 */
    sourceSets {
        main {
            if (Boolean.valueOf(rootProject.ext.isComponentBaseModule)) {
                manifest.srcFile 'src/main/module/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
            }
        }
    }



    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
  
  
  ...  

}

 

 

 

4.壳工程(APP)的Gradle文件修改

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 30

    defaultConfig {
        applicationId "com.wjn.componentdemo"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

     ...

    /** 是否加载 component_base */
    if (!Boolean.valueOf(rootProject.ext.isComponentBaseModule)) {
        implementation project(':component_base')
    }
}

这样我们就完成了基本的组件化配置,下面我们就来开始开发吧。

 

 

Android 组件化 各个Module统一配置Gradle文件

https://blog.youkuaiyun.com/weixin_37730482/article/details/70243331

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值