Android组件化

作者: flynnny | 来源:发表于2021-03-11 23:38 被阅读0次

    总结自
    https://www.bilibili.com/video/BV1Ar4y1A7kh
    https://www.bilibili.com/video/BV1X5411A7dc

    意义
    1开发效率高、维护性强
    2高内聚、低耦合

    1.png

    settings.gradle、build.gradle、app下的build.gradle三个配置文件作用

    settings.gradle:指定大工程module下加载哪些子module,当新建一个module,选择AndroidLibrary,命名"common"时,会自动include到里面
    里面还有全局的rootProject.name

    2.png

    build.gradle:针对整个工程下构建模块、插件

    3.png

    app下的build.gradle:app model模块如何定义

    4.png

    build.gradle、app下的build.gradle 基本一致

    生成开头四个model

    app:打包的壳模块
    common是library:底层基础类库,build.gradel
    中有一句

    plugins{
      id 'com.android.library'//会生成arr文件,类似于jar包!!!
    }
    

    order模块:订单模块
    对比common ,build.gradel
    中有一句

    plugins{
      id 'com.android.application'//会打包成apk!!!
    }
    

    personal模块:个人中心模块
    同order,现在还是一个独立的apk

    1定义+引入公共配置

    加载项目的时候 就引入app_config.gradle
    两种方法:1、settings.gradle引入(配置用的,并不适合) 或者2、在外层build.gradle引入

    apply from : 'app_config.gradle'
    
    app_config.gradle 内容.png 5.png

    测试

    在build.gradle中加入下面一行,测试代码

    println "app_config.gradle > username = " +rootProject.ext.username
    

    运行就会打印出“zouchanglin”

    2公共内容抽取到app_config.gradle

    比如在app_config.gradle中加入

    //这是一个MAP
    app_android = {
      compileSdkVersion:30
    }
    

    在order项目里的 build.gradle就可以改为

    android{
      compileSdkVersion app_android.compileSdkVersion
      ...
    }
    
    7.png 8.png

    同理修改好其他model

    不同插件的不同效果

    先把common添加到order 和 person里

    9.png

    如上图,person同理配置完毕

    比如在common中定义了一个方法

    10.png

    order里就可以直接使用

    11.png

    不同插件的不同效果

    common中定义

    12.png

    举例order中:

    13.png

    person同理。

    当然还有处理ApplicationID,因为作为库时不能有ApplicationID的,如果此时未处理就打包会报错:

    14.png 15.png

    person同理。

    app壳工程集成处理:

    16.png

    对app 打包即可。想要单独运行,修改isRelease即可单独运行。

    修改manifest文件

    在壳app里直接可以进入另外的model中,但这样耦合性高,非常不推荐,和一个工程没区别---使用路由ARouter解决(最后面讲)

    17.png

    因为我们把order和person的manifest也引入了,即把他们的启动器也引入了,所以需要通过build.gradel控制manifest文件:

    1、在main下新建debug文件夹,把manifest文件复制进去;
    2、去掉原manifest文件多余部分

    18.png

    3、sourceSet:在order和person build.gradel下加入下图代码

    19.png

    "exclude '/debug/'" debug目录下的都不打进包,方便测试。如下图的Activity不打包.

    20.png

    当然还要去掉相关使用代码。

    APT与JavaPoet 编写helloworld

    组件间的路由ARouter解决直接引用的耦合度问题。这里我们要自己实现。

    APT(Annotation Processing Tool)注解处理器
    ButterKnife、Dagger、EventBus等都用到了APT,会把注解在编译时期生成java代码。

    JavaPoet:以面向对象的方式定义如何生成java代码。

    1新建注解

    新建工程---》选择“java or kltlin Library”
    名“annotation”

    21.png 22.png

    2在需要用这个注解的地方引入

    23.png

    3 修改内容来使用

    24.png

    4 配置注解的buildgradle

    25.png

    5 Activity调用注解

    30.png

    6 处理注解

    通过apt(注解处理器)技术把注解转换成代码。

    新建工程---》选择“java or kltlin Library”
    名“annotation-processor”

    修改其build.gradel

    27.png

    编写注解处理器:

    28.png

    修改一下app---》build.gradle中的内容

    31.png

    app中使用代码生成器

    29.png

    执行编译后 打印出结果

    32.png

    生成的hello world在App下:

    33.png

    现在想在写上ARouter的地方路由到路由表里去,直接生成router时间太长,以后再讲...

    APT实现基于注解的View注入

    基于注解,替代findViewById;功能更全面的推荐使用ButterKnife,这里简单演示

    新new一个工程

    新建modle --》java or kotlin Library-->"annotation"

    配置build.gradle

    36.png

    创建DIView

    34.png

    创建DIActivity

    35.png

    创建注解处理器
    新建modle --》java or kotlin Library-->"annotation-processor"

    配置注解处理器build.gradle

    37.png 38.png 39.png

    app中添加引入

    40.png

    Activity中使用

    41.png 42.png

    相关文章

      网友评论

        本文标题:Android组件化

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