总结自
https://www.bilibili.com/video/BV1Ar4y1A7kh
https://www.bilibili.com/video/BV1X5411A7dc
意义
1开发效率高、维护性强
2高内聚、低耦合
settings.gradle、build.gradle、app下的build.gradle三个配置文件作用
settings.gradle:指定大工程module下加载哪些子module,当新建一个module,选择AndroidLibrary,命名"common"时,会自动include到里面
里面还有全局的rootProject.name
build.gradle:针对整个工程下构建模块、插件
3.pngapp下的build.gradle:app model模块如何定义
4.pngbuild.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.pngorder里就可以直接使用
11.png不同插件的不同效果
common中定义
12.png举例order中:
13.pngperson同理。
当然还有处理ApplicationID,因为作为库时不能有ApplicationID的,如果此时未处理就打包会报错:
14.png 15.pngperson同理。
app壳工程集成处理:
16.png对app 打包即可。想要单独运行,修改isRelease即可单独运行。
修改manifest文件
在壳app里直接可以进入另外的model中,但这样耦合性高,非常不推荐,和一个工程没区别---使用路由ARouter解决(最后面讲)
17.png因为我们把order和person的manifest也引入了,即把他们的启动器也引入了,所以需要通过build.gradel控制manifest文件:
1、在main下新建debug文件夹,把manifest文件复制进去;
2、去掉原manifest文件多余部分
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”
2在需要用这个注解的地方引入
23.png3 修改内容来使用
24.png4 配置注解的buildgradle
25.png5 Activity调用注解
30.png6 处理注解
通过apt(注解处理器)技术把注解转换成代码。
新建工程---》选择“java or kltlin Library”
名“annotation-processor”
修改其build.gradel
27.png编写注解处理器:
28.png修改一下app---》build.gradle中的内容
31.pngapp中使用代码生成器
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.pngapp中添加引入
40.pngActivity中使用
41.png 42.png
网友评论