架构日记(二) 模块化多Moudle下的gradle配置

APP 0 1437
00224176
00224176 版主 - APP 关注 2021年7月22日 15:51 编辑
<p>新的工程建立,多个Moudle的gradle的管理就是一个很繁琐的问题。<br><br>你有没有见过这样<br><br>“The given artifact contains a string literal with a package reference 'android.support.v4.content'”之类的问题,各种v4 v7和androidx之间的冲突,或者依赖包版本不向下兼容,或者冲突包的问题?<br><br>本文采用config.gradle来统一控制整个工程的各个依赖的版本控制。代替原来的在project-gradle工程中自定义变量的方式来控制<br><br>第一步:新建config.gradle<br><br>打开工程和setting.gradle同一级目录下新建file,名称采用全命名"config.gradle"</p><p><img src="https://51techud.yykj.com:9002/forumpic/20210722154941_5a.png" style="max-width:100%;"><br></p><p style="outline: 0px; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; line-height: 26px !important;">第二步:引用config.gradle(必要步骤)</p><p style="outline: 0px; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; line-height: 26px !important;">在project-gradle下添加“apply from : 'config.gradle'”</p><pre><code>// Top-level build file where you can add configuration options common to all sub-projects/modules.<br>apply from: 'config.gradle'<br>buildscript {<br> <br> repositories {<br> maven {<br> url 'https://repo.huaweicloud.com/repository/maven/'<br> }<br> jcenter()<br> <br> }<br> dependencies {<br> classpath 'com.android.tools.build:gradle:3.6.3'<br> classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'<br> <br> // NOTE: Do not place your application dependencies here; they belong<br> // in the individual module build.gradle files<br> }<br>}<br> <br>allprojects {<br> repositories {<br> maven {<br> url 'https://repo.huaweicloud.com/repository/maven/'<br> }<br> maven { url "https://jitpack.io" }<br> jcenter()<br> <br> }<br>}<br> <br>task clean(type: Delete) {<br> delete rootProject.buildDir<br>}</code></pre><p style="outline: 0px; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; line-height: 26px !important;">第三步:编写config.gradle</p><p style="outline: 0px; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; line-height: 26px !important;">本工程导入的依赖包,感觉挺好用的推荐使用,后续的架构中也会用到</p><pre><code>ext{<br> <br> android = [<br> compileSdkVersion : 29,<br> minSdkVersion : 21,<br> targetSdkVersion : 29,<br> versionCode : 1,<br> versionName : "1.0",<br> buildToolsVersion : "29.0.1"<br> ]<br> <br> dependencies = [<br> //基础库<br> appcompat : "androidx.appcompat:appcompat:1.1.0",<br> junit_junit : "junit:junit:4.12",<br> androidx_junit : "androidx.test.ext:junit:1.1.1",<br> espresso_core : "androidx.test.espresso:espresso-core:3.2.0",<br> //app主工程基础库<br> constraintlayout : "androidx.constraintlayout:constraintlayout:1.1.3",<br> //ARout<br> arouter_api : "com.alibaba:arouter-api:1.2.2",<br> arouter_compiler : "com.alibaba:arouter-compiler:1.1.3",<br> //butterknif插件<br> butterknif : "com.jakewharton:butterknife:10.0.0",<br> butterknife_compiler : "com.jakewharton:butterknife-compiler:10.0.0",<br> //RxJava+Retrofit+okhttp3<br> rxjava : "io.reactivex.rxjava2:rxjava:2.1.5",<br> rxandroid : "io.reactivex.rxjava2:rxandroid:2.0.1",<br> retrofit : "com.squareup.retrofit2:retrofit:2.3.0",<br> adapter_rxjava : "com.squareup.retrofit2:adapter-rxjava2:2.3.0",<br> converter_scalars : "com.squareup.retrofit2:converter-scalars:2.3.0",<br> gson : "com.squareup.retrofit2:converter-gson:2.3.0",<br> okhttp : "com.squareup.okhttp3:okhttp:3.9.0",<br> logging_interceptor : "com.squareup.okhttp3:logging-interceptor:3.9.0",<br> cookie : "com.github.franmontiel:PersistentCookieJar:v1.0.1",<br> //qmui组件库<br> qmui : "com.qmuiteam:qmui:2.0.0-alpha08",<br> qmui_arch : "com.qmuiteam:arch:2.0.0-alpha08",<br> qmui_arch_compiler : "com.qmuiteam:arch-compiler:2.0.0-alpha08"<br> <br> ]<br> <br> <br>}</code></pre><p><span style="color: rgb(77, 77, 77); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; font-size: 16px;">第四步:在base,app以及其他module的gradle中使用,随便打开一个gradle看调用方式</span><br></p><pre><code>apply plugin: 'com.android.library'<br> <br>android {<br> compileSdkVersion rootProject.ext.android["compileSdkVersion"]<br> buildToolsVersion rootProject.ext.android["buildToolsVersion"]<br> <br> defaultConfig {<br> minSdkVersion rootProject.ext.android["minSdkVersion"]<br> targetSdkVersion rootProject.ext.android["targetSdkVersion"]<br> versionCode rootProject.ext.android["versionCode"]<br> versionName rootProject.ext.android["versionName"]<br> <br> testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"<br> consumerProguardFiles 'consumer-rules.pro'<br> javaCompileOptions {<br> annotationProcessorOptions {<br> arguments = [ moduleName : project.getName() ]<br> }<br> }<br> }<br> <br> buildTypes {<br> release {<br> minifyEnabled false<br> proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'<br> }<br> }<br> <br>}<br> <br>dependencies {<br> implementation fileTree(dir: 'libs', include: ['*.jar'])<br> <br> //QMUI<br> api rootProject.ext.dependencies["qmui"]<br> api rootProject.ext.dependencies["qmui_arch"]<br> <br> //内存分析工具<br> debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'<br> releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'<br> testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'<br> <br> //ARouter<br> api rootProject.ext.dependencies["arouter_api"]<br> //butterknif插件<br> api rootProject.ext.dependencies["butterknif"]<br> //RxJava+Retrofit+okhttp3<br> api rootProject.ext.dependencies["rxjava"]<br> api rootProject.ext.dependencies["rxandroid"]<br> api rootProject.ext.dependencies["retrofit"]<br> api rootProject.ext.dependencies["adapter_rxjava"]<br> api rootProject.ext.dependencies["converter_scalars"]<br> api rootProject.ext.dependencies["gson"]<br> api rootProject.ext.dependencies["okhttp"]<br> api rootProject.ext.dependencies["logging_interceptor"]<br> //Cookie持久化管理(推荐)<br> api rootProject.ext.dependencies["cookie"]<br>}</code></pre><p><span style="color: rgb(77, 77, 77); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; font-size: 16px;">这个是base的gradle,在这里顺便说一下为什么都是使用api</span><br></p><p><img src="https://51techud.yykj.com:9002/forumpic/20210722155052_u3.png" style="max-width:100%;"><span style="color: rgb(77, 77, 77); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; font-size: 16px;"><br></span></p><p style="outline: 0px; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; line-height: 26px !important;">从官网介绍可以看出,implementation可以让module在编译时隐藏自己使用的依赖,但是在运行时这个依赖对所有模块是可见的。而api与compile一样,无法隐藏自己使用的依赖。</p><p style="outline: 0px; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; line-height: 26px !important;">有一个结构清晰的gradle的管理会为后期工程的维护,依赖包的升级减少大量的工作量。</p>
赞(0) 收藏(0)  分享
相关标签:
0个回复
  • 消灭零回复
Vaptcha启动中...