组件化

作者: lww文 | 来源:发表于2020-09-12 22:29 被阅读0次

    一、什么是组件和模块

    1.1组件:把重复的代码提取出来合并成为一个个组件,组件最重要的就是重用(复用),位于框架最底层,其他功能都依赖于组件,可供不同功能使用,独立性强。

    1.2模块:分属同一功能/业务的代码进行隔离(分装)成独立的模块,可以独立运行,以页面、功能或其他不同粒度划分程度不同的模块,位于业务框架层,模块间通过接口调用,目的是降低模块间的耦合,由之前的主应用与模块耦合,变为主应用与接口耦合,接口与模块耦合。

    模块就像有多个USB插口的充电宝,可以和多部手机充电,接口可以随意插拔。复用性很强,可以独立管理。

    二、组件和模块的区别

    2.1组件:就像一个个小的单位,多个组件可以组合成组件库,方便调用和复用,组件间也可以嵌套,小组件组合成大组件。

    2.2模块:就像是独立的功能和项目(如淘宝:注册、登录、购物、直播...),可以调用组件来组成模块,多个模块可以组合成业务框架。

    1 统一gradle 

    1:在gradle .properties  中定义   各种配置  (尽量大写) 然后在 build.gradle 中使用

    因为 gradle .properties 默认是 string 类型 所以在 使用的时候  转成所需要的的 格式

    ===============

     gradle .properties

    CompileSdkVersion  = 29

    build.gradle  

    compileSdkVersion CompileSdkVersion.toInteger()

    ===============

    2 在项目的build.grdle 中定义

    ===============

    ext{

        android = [

    compileSdkVersion :29

        ]

    }

    在app的build.grdle 中使用

    rootProject.ext.android.compileSdkVersion

    ================

    3: 在项目的更目录  创建 config.gradle

    ==================================

    ext{

        android = [

    compileSdkVersion:29,

    buildToolsVersion:'30.0.2',

    minSdkVersion    :16,

    targetSdkVersion :29,

    versionCode      :1,

    versionName      :'1.0',

    compileSdkVersion:29

        ]

    dependencies =[

                publicimplementation :[

    'androidx.appcompat:appcompat:1.2.0',

    'androidx.constraintlayout:constraintlayout:2.0.1'

                ],

    publictestImplementation :[

    'junit:junit:4.12'

                ],

    publicandroidTestImplementation :[

    'androidx.test.ext:junit:1.1.2',

    'androidx.test.espresso:espresso-core:3.3.0'

                ],

    publicfileTree :fileTree(dir:"libs",include: ["*.jar"])

    ]

    }

    在模块的 build.gradle 中使用

    ======================================

    applyplugin:'com.android.application'

    android{

        compileSdkVersionrootProject.ext.android.compileSdkVersion

    buildToolsVersionrootProject.ext.android.buildToolsVersion

    defaultConfig{

            applicationId"com.example.login"

            minSdkVersionrootProject.ext.android.minSdkVersion

    targetSdkVersionrootProject.ext.android.targetSdkVersion

    versionCoderootProject.ext.android.versionCode

    versionNamerootProject.ext.android.versionName

    testInstrumentationRunner"androidx.test.runner.AndroidJUnitRunner"

        }

        buildTypes{

            release{

                minifyEnabledfalse

                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'

            }

    }

    }

    dependencies{

        implementation rootProject.ext.dependencies.publicfileTree

    implementationrootProject.ext.dependencies.publicimplementation

    testImplementationrootProject.ext.dependencies.publictestImplementation

    androidTestImplementationrootProject.ext.dependencies.publicandroidTestImplementation

    }

    ======================================

    =====================================

    2:解决 每个 组件 判断 自己是 不是独立的 application

    1: 在basic模块的 的build.gradle 中配置

    =======================

    buildTypes{

        release{

            buildConfigField("boolean","is_applicaion",rootProject.ext.android.is_applicaion.toString() )

    minifyEnabledfalse

            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'

        }

        debug{

            buildConfigField("boolean","is_applicaion",rootProject.ext.android.is_applicaion.toString() )

    }

    }

    2: 在asic模块 定义一个BaseActivity  提供一个获取  is_application的

    final boolean is_application = BuildConfig.is_applicaion;

    public boolean getIsApplicayion() {

    return is_application;

    }

    3: 每个组件的 activity  继承BaseActivity

    =======================

    建立每个组件的application 类

    1:在组件的src/mian 牡目录下建立 一个文件夹  

    2:在 组件的 build.gradle 中 定义  java.srcDir  'src/main/新建的文件夹'

    3: 在新建的文件夹下 创建自己 所需要的java 文件

    ======================上面基础配置 基本完成   下面的重点是组件通讯

    注解是 标记能标记我们程序中的某些东西

    注解处理器 相当于大脑   去找 注解 然后识别  然后执行对应指令

    编译时技术用来做什么?

    :第一步   创建注解  让注解把所有需要加入到路由中的类  标记起来

    :第二 步 创建注解处理器   取代吗中找到 专门标记 acttyivity的 注解  得到标记的类

    第三部  生成Activityutils类

    怎么玩编译时技术?

    1 创建  javalibrary    annotation  (因为编译时技术是java 技术 不是安卓的)

    创建一个注解类 =

    =======================

    @Target(ElementType.TYPE)// 声明注解的作用域 ElementType.TYPE 在类上

    @Retention(RetentionPolicy.CLASS)//// 声明注解的生命周期  存在时间

      // RetentionPolicy.SOURCE  源码时 (最短期)  RetentionPolicy.CLASS 编译时      RetentionPolicy.RUNTIME  运行行(生命时间最长)

    public @interface BindPath {

    Stringvalue();

    }

    2: 在connfgi.gradle 中依赖这个库

    3: 在 组件中的activity 类上 加 注解

    @BindPath("main/main")

    =========================

    2  创建  javalibrary    annotation_compiler  注解   处理器的lbrary

    具体 使用看demo :https://github.com/liuwenwen-123/zujianHuademo

    相关文章

      网友评论

          本文标题:组件化

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