本文共 2266 字,大约阅读时间需要 7 分钟。
承上 Android组件化模块化在移动应用开发中 (序)
查看地址:https://juejin.im/post/5e4d2256f265da575918d381#heading-5
去限制每个library只依赖框架代码并为其添加统一的调试外壳代码,而不是变身app,浪费转换时间,也不需要写两份清单文件。
在此之前简单熟悉一下Gradle能使你的项目构建更快;
Gradle项目的构建分为三个阶段:初始化、配置、执行。在调试时,只去加载需要调试或联合调试的 Module 这样去提高一点构建速度。
Gradle在初始化阶段会首先去查找setting.gradle
文件,查找的规则如下:
查找当前构建目录下的setting.gradle
文件。
如果没有找到,则去与当前目录有相同嵌套级别的master
目录查找。
如果没有找到,则去父目录查找。
如果没有找到,则进行单项目构建。
如果找到了,Gradle去检查当前项目在settings.gradle
中是否有定义。如果没有,则进行单项目构建,否则进行多项目构建。
多项目工程在根目录必须存在setting.gradle
文件,单项目工程则可以不需要这个文件。
我们在这个文件内去配置需要调试开发的Library
include ':app'//必要的include ':必要的xxx'//壳app 要加载的Librarygradle.ext.isAppMap = [/** -1 剔除; 0 libaray; 1 APP*/ ':占位' : -2, ':libraryA': 0, ':libraryB': -1, ]gradle.ext.isDebug = truegradle.ext.debugModelApp = falsefor (String libraryName : gradle.ext.isAppMap.keySet()) { if... 决定是否要加载libaray}
app的build.gradle
...dependencies { ... for (String modelName : gradle.ext.isAppMap.keySet()) { if (gradle.ext.isDebug) { if (gradle.ext.isAppMap.get(modelName) == 0) { implementation project(modelName) } } else { implementation project(modelName) } }}
每个library的build.gradle
switch (rootProject.getLoadType(getName())) { case -1: return case 0: apply plugin: 'com.android.library' break}
新建config.gradle
ext { android = [ compileSdkVersion : 29, ...... ]}def config = rootProject.ext.android//相关库依赖subprojects { afterEvaluate { mProject -> if (mProject.hasProperty('android')) { android { compileSdkVersion config.compileSdkVersion ...... defaultConfig { if (mProject.getName().equals('app')) { applicationId "applicationId" } minSdkVersion config.minSdkVersion targetSdkVersion config.targetSdkVersion } } } dependencies { } }}
在根项目build.gradle
apply from: "config.gradle"
这样,新建一个Module 基本不需要配置其他,就可以在该Modulen内去实现代码,不同library页面跳转使用ARouter等。
... 未完待续...
作者:caterpillars链接:https://juejin.im/post/5e5f2efde51d4526d43f3b99喜欢 就关注吧,欢迎投稿!
转载地址:http://ftbtb.baihongyu.com/