android 创建组件,Android组件化

意义

1开发效率高、维护性强

2高内聚、低耦合

410cc99ff948

1.png

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

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

里面还有全局的rootProject.name

410cc99ff948

2.png

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

410cc99ff948

3.png

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

410cc99ff948

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'

410cc99ff948

app_config.gradle

内容.png

410cc99ff948

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

...

}

410cc99ff948

7.png

410cc99ff948

8.png

同理修改好其他model

不同插件的不同效果

先把common添加到order 和 person里

410cc99ff948

9.png

如上图,person同理配置完毕

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

410cc99ff948

10.png

order里就可以直接使用

410cc99ff948

11.png

不同插件的不同效果

common中定义

410cc99ff948

12.png

举例order中:

410cc99ff948

13.png

person同理。

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

410cc99ff948

14.png

410cc99ff948

15.png

person同理。

app壳工程集成处理:

410cc99ff948

16.png

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

修改manifest文件

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

410cc99ff948

17.png

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

1、在main下新建debug文件夹,把manifest文件复制进去;

2、去掉原manifest文件多余部分

410cc99ff948

18.png

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

410cc99ff948

19.png

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

410cc99ff948

20.png

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

APT与JavaPoet 编写helloworld

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

APT(Annotation Processing Tool)注解处理器

ButterKnife、Dagger、EventBus等都用到了APT,会把注解在编译时期生成java代码。

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

1新建注解

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

名“annotation”

410cc99ff948

21.png

410cc99ff948

22.png

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

410cc99ff948

23.png

3 修改内容来使用

410cc99ff948

24.png

4 配置注解的buildgradle

410cc99ff948

25.png

5 Activity调用注解

410cc99ff948

30.png

6 处理注解

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

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

名“annotation-processor”

修改其build.gradel

410cc99ff948

27.png

编写注解处理器:

410cc99ff948

28.png

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

410cc99ff948

31.png

app中使用代码生成器

410cc99ff948

29.png

执行编译后 打印出结果

410cc99ff948

32.png

生成的hello world在App下:

410cc99ff948

33.png

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

APT实现基于注解的View注入

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

新new一个工程

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

配置build.gradle

410cc99ff948

36.png

创建DIView

410cc99ff948

34.png

创建DIActivity

410cc99ff948

35.png

创建注解处理器

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

配置注解处理器build.gradle

410cc99ff948

37.png

410cc99ff948

38.png

410cc99ff948

39.png

app中添加引入

410cc99ff948

40.png

Activity中使用

410cc99ff948

41.png

410cc99ff948

42.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值