Android 主Module引用依赖Module,却无法使用里面的依赖库

如果模块化开发中遇到

多模块的AndroidManifest.xml没有合并
or
多模块的资源文件没有合并
or
模块A include了模块B,而无法使用模块B内依赖的其他aar包中的类的时候
or
提示Support包版本不一致
这篇文章可能就是你要的解决方案~

举个栗子:

比如我们现在有一个App模块设计为:
主工程: app
模块: ui , framework

引入模块的方式:在settings.gradle中,指定正确的模块路径

1include ':app', ':framework', ':ui' 2project(':framework').projectDir = new File('../framework') 3project(':ui').projectDir = new File('../ui')

如果现在framework引入了一些依赖库,假设如下:

1// Retrofit 网络框架依赖 2implementation "com.squareup.retrofit2:retrofit:2.5.0" 3 4// Gson 依赖 5implementation 'com.google.code.gson:gson:2.8.5' 6 7// ARouter解耦框架 8implementation 'com.alibaba:arouter-api:1.4.1' 9annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

如果这样写的话,主工程app中将无法调用到这些依赖库中的类。
因为implementation声明的依赖只能在本module模块内使用,跨module使用就要使用api声明(其实就是曾经的compile,但是如果设置成compile,AS又要给你叫叫叫)!!改成如下即可

1// Retrofit 网络框架依赖 2api "com.squareup.retrofit2:retrofit:2.5.0" 3 4// Gson 依赖 5api 'com.google.code.gson:gson:2.8.5' 6 7// ARouter解耦框架 8api 'com.alibaba:arouter-api:1.4.1' 9annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

同理,这是模块里引用别的aar,这样配置完了,那么紧接着需要在依赖framework的app模块中,
在build.gradle的依赖处加入对应的引入哈。

api project(":framework")

当然如果全部做完,由于很多aar里使用了不一样的support版本,一定会提示版本不兼容了(其他aar不兼容的解决方案一样哈),在主工程app的build.gradle中指定:

1android { 2 ..... 3 ..... 4//指定jdk版本 5 compileOptions { 6 sourceCompatibility JavaVersion.VERSION_1_8 7 targetCompatibility JavaVersion.VERSION_1_8 8 } 9 10 // 如果提示多个重复文件,加这属性 11 packagingOptions { 12 exclude 'META-INF/proguard/androidx-annotations.pro' 13 } 14} 15 16// 用于指定所有aar引用同样版本的support包 17configurations.all { 18 resolutionStrategy.eachDependency { DependencyResolveDetails details -> 19 def requested = details.requested 20 if (requested.group == 'com.android.support') { 21 if (!requested.name.startsWith("multidex")) { 22 details.useVersion '28.0.0' 23 } 24 } 25 } 26}

————————————————
版权声明:本文为CSDN博主「胖虎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ljphhj/article/details/86262031

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )