美文网首页组件化it-技术
Android组件化开发初探

Android组件化开发初探

作者: 缘始_ | 来源:发表于2019-02-14 17:03 被阅读142次

    组件化

    项目需求的不断变更,项目越来越大,代码越来越臃肿,耦合度越来越高,导致开发效率下降。为了解决这一问题,最开始模块化,划分为多个模块进行开发,由于项目过大,每次打包编译特别慢,测试不方便,然后对每个模块进行拆分,实现组件化。


    在这里插入图片描述

    这样做的一个好处,各个业务组件可以单独拿出来测试,减少了每次打包时的编译耗费时间,开发人员可以单独负责自己的业务组件。

    组件各个模块配置

    android studio 提供了一个工程下创建多个module,我们怎么样使这些module在app module下进行插拔式。


    在这里插入图片描述

    保证在每个module的build.gradle中可以调用一个变量,可以在项目工程的gradle.properties文件中顶一个变量如:

    isModule=false
    
    

    在业务模块的build.gradle中的配置如下:

    if (isModule.toBoolean()) {
        apply plugin: 'com.android.application'//可以单独打包成apk
    } else {
        apply plugin: 'com.android.library'
    }
    android {
        compileSdkVersion 28
        defaultConfig {
            if (isModule.toBoolean()) {
                applicationId "com.example.infoapplication"
            }
            minSdkVersion 15
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            javaCompileOptions {
                annotationProcessorOptions {
                    arguments = [AROUTER_MODULE_NAME: project.getName()]
                }
            }
        }
        sourceSets {
            main {
                if (isModule.toBoolean()) {
                    manifest.srcFile 'src/main/release/AndroidManifest.xml'
                } else {
                    manifest.srcFile 'src/main/debug/AndroidManifest.xml'
                }
            }
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    dependencies {
        implementation 'com.android.support:appcompat-v7:28.0.0'
        //Arouter
        annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
        implementation project(':mylibrary')
    }
    
    

    同时业务模块的项目结构如下:AndroidManifest.xml加载方式见sourceSets 。


    在这里插入图片描述

    而app壳下的文件配置如下:

    dependencies {
        implementation 'com.android.support:appcompat-v7:28.0.0'
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    
        if (!isModule.toBoolean()) {
            implementation project(':shopcomponent')
            implementation project(':infoapplication')
        } 
        implementation project(':mylibrary')
    }
    
    

    跨模块跳转(路由)

    由于各个功能在各组件模块中,这就导致Activity之间跨模块跳转,这样有两种方式,1.通过包名,可以跳转到另一个模块的activity,2.通过路由,使用阿里巴巴的ARouter。
    ARouter的功能:
    支持直接解析标准URL进行跳转,并自动注入参数到目标页面中
    支持多模块工程使用
    支持添加多个拦截器,自定义拦截顺序
    支持依赖注入,可单独作为依赖注入框架使用
    支持InstantRun
    支持MultiDex(Google方案)
    映射关系按组分类、多级管理,按需初始化
    支持用户指定全局降级与局部降级策略
    页面、拦截器、服务等组件均自动注册到框架
    支持多种方式配置转场动画
    支持获取Fragment
    完全支持Kotlin以及混编(配置见文末 其他#5)
    支持第三方 App 加固(使用 arouter-register 实现自动注册)
    支持生成路由文档
    提供 IDE 插件便捷的关联路径和目标类
    对于Arouter的配置:
    在基模块中进行配置:

        //arouter  https://github.com/alibaba/ARouter
        api 'com.alibaba:arouter-api:1.4.1'
        annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
    
    
    javaCompileOptions {
                annotationProcessorOptions {
                    arguments = [AROUTER_MODULE_NAME: project.getName()]
                }
            }
    
    

    同时在各个子组件模块中添加:(由于Arouter以注解的形式)

    annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
    
    javaCompileOptions {
                annotationProcessorOptions {
                    arguments = [AROUTER_MODULE_NAME: project.getName()]
                }
            }
    
    

    示例代码

    相关文章

      网友评论

        本文标题:Android组件化开发初探

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