组件化

2020-09-12  本文已影响0人  lww文

一、什么是组件和模块

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

上一篇下一篇

猜你喜欢

热点阅读