美文网首页
Android组件化基础框架配置

Android组件化基础框架配置

作者: 麦可西 | 来源:发表于2020-11-24 11:48 被阅读0次

新建的Module以Android Library 的形式新建

  1. main组件的gradle文件中,apply plugin使用的是com.android.application


    image.png
  2. 其他业务模块(组件A、组件B、组件C、组件D、common组件等),apply plugin使用的是com.android.library


    image.png

组件集成

  1. 各个组件都建立完成之后,接下来可以把组件集成到main组件中,集成非常简单,只需在main组件的gradle文件中添加dependencies{}配置,添加如下语句:
image.png

组件资源共享

1、在common组件的build.gradle文件中,添加android 配置,如下:

android {
    //common组件下面添加
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}

在各个需要调用公共common组件的组件build.gradle文件中,也添加android 配置,如下:

android {
    //common组件下面添加
    repositories {
        flatDir {
            dirs '../common/libs/', 'libs'
        }
    }
}

2、common组件里引入各种类库的时候必须用api,而不是用implementation,原因:

implementation编译的依赖只作用于当前的module,即common组件模块中使用implementation编译的三方库只对common模块起作用,main组件模块中无法使用该三方库。

image.png

3、关于组件资源共享,举个简单示例:例如图片都是存放到公共的common组件的res里,那么如何在组件A、组件B、组件C里使用呢?


image.png

使用方法如下:

  • 打开各组件的build.gradle文件,在dependencies{}里添加如下代码
dependencies {
    
    ...
 
    implementation project(':common')
{

-如此一来,就能在组件A里调用common组件的图片资源了


image.png

同样的道理, 组件A、 组件B、 组件C的颜色代码也可以直接调用公共common组件里colors.xml的代码


image.png

我们可以把其他第三方库、自定义view、工具类、公用资源都放进公共common组件里,也就是说组件A、组件B、组件C里build.gradle所引入的类库,都可以放到common组件里的dependencies{}里

所以各个业务组件里面的build.gradle文件的dependencies{}配置简化后,就变成了下面这样:

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation project(':common')
}

通过以上解说,大家应该都明白了吧,图片、xml这些(value目录下的各种xml文件),都可以放到公共common组件里,然后再被其他组件引用。对于全局共用的style.xml文件,我们更应该把它放在common组件中,例如我们的项目theme,本来是放在main组件的style里面,我们可以把它移到common中,这样其他组件调试时,作为一个单独的项目,也能和主项目有一样的主题。总而言之,所有你认为可以被各个组件共享的资源,都可以放在common组件中。

往组件里添加Fragment

1、以组件D为例,在组件D里添加一个包fragment

2、在fragment包右键 → New → Fragment →Fragment(Blank)

3、 填写Fragment碎片名称,勾选创建xml文件,如下:

各个组件单独开发(测试)

组件单独开发时,我们需要改build.gradle的apply plugin模式,等要集成到main组件时,又得改回来,如果这样子手工去改,组件一多,修改起来比较麻烦,也不优雅。优雅的解决办法就是设置一个开关,打开时,就是application模式,可以单独开发;关闭时,就是library模式,可以集成到main组件中。现在按我下面的步骤来实现:

1、在项目根目录下,有一个build.gradle文件,在这个文件最末尾添加一个ext {}配置,然后在ext配置里设定一个常量isDebug,值设为true


image.png

2、build.gradle里设置了isDebug常量后,我们项目中的其他build.gradle文件都可以把这个常量读取出来,所以我们可以在其他组件的build.gradle文件中,读取该常量的值,动态设置apply plugin,代码如下:

if(isDebug){
    apply plugin: 'com.android.application'
}else {
    apply plugin: 'com.android.library'
}

3、这样子设置之后,当我们需要切换模式时,只需要修改项目根目录下build.gradle文件中isDebug常量的值,修改完成之后,点击Project sync按钮同步一下即可。如果有报错,那么还有个地方需要修改一下,就是main组件的build.gradle文件,我们把module的模式改成了application,main组件就不能引入application,引入的话就会报错,所以当是debug调试模式时,这里就不引入该组件,以免报错。所以在集成组件前,要先判断是什么模式,如下图:


image.png

4、接下来还得修改 AndroidManifest.xml,当把一个module设置为application时,AndroidManifest.xml需要包含一个app所需要的属性,例如app的icon、theme、launch Activity这些属性设置,而当module为library时,这些属性就都不需要用到,所以当我们处于不同模式时,AndroidManifest.xml文件的配置也得不同。方法如下:

(1)、Android目录模式切换到Project目录模式
(2)、 在各个组件的src文件夹中新创建一个debug目录,再把我们用于debug调试的AndroidManifest.xml文件放进去


image.png

(3)、调试用的AndroidManifest.xml文件可以直接复制manifests目录里的,然后添加application的基本信息,如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.moudeld">
    <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">
    </application>
</manifest>

以上内容会有很多错误提示,其实提示的无非就是资源找不到,既然前面我们已经创建了公共的common组件,那么我们只需要把main组件中相应的资源移动到common组件中就可以了

5、接下来在各个组件的build.gradle文件中,指定不同模式下使用的AndroidManifest.xml文件,在android {}里添加如下代码:

sourceSets {
        main {
            if (isDebug) {
                manifest.srcFile 'src/debug/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
                //集成开发模式下排除debug文件夹中的所有Java文件
                java {
                    exclude 'debug/**'
                }
            }
        }
    }
image.png

统一项目版本号
各个组件的build.gradle文件中,有很多版本号。为了避免每次修改都得同时修改多份build.gradle文件,也避免不同的组件使用的版本不一样,导致冲突,所以我们可以把这些版本号统一管理起来,方法如下:

1、在项目根目录下的build.gradle文件中,定义版本号常量


image.png

2、然后在各个组件的build.gradle文件中,做这样的修改:

android {
    compileSdkVersion rootProject.ext.android.compileSdkVersion
    buildToolsVersion rootProject.ext.android.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName
    }
}

相关文章

网友评论

      本文标题:Android组件化基础框架配置

      本文链接:https://www.haomeiwen.com/subject/cytiiktx.html