Android开发中导入第三方库所遇问题记录
1、重复循环依赖的问题
(1)需求
如下图所示:

在Android 项目中,采用模块化开发,一个是主跑application——Mudule A,另外一个是library——Library B
1)Module A,其中libs中有个x.jar,该Module中需要用到此jar包。Module A由其他团队维护,由于某些原因,不可改动其结构。
2)Library B,也需要使用x.jar,且Module A依赖该Library B。该Library由我维护。
(2)错误的方案

如上图,是我尝试的一种方案,在Library B中的libs目录下也添加了x.jar并依赖。当然这种方案后来报错了,报错信息为(这里使用的x.jar包其实就是google的protobuf库):
Program type already present: com.google.protobuf.BlockingRpcChannel
网上查的资料显示,这是由于重复依赖导致的。Module A中依赖了x.jar,又依赖了 Library B,而Library B又依赖了x.jar,不难发现这里存在重复依赖的问题。
(3)困难点
这里因为特定的需求,不能改变Module A的结构,不然我们可以把 x.jar单独放入一个Module中,然后Module A和 Library B都依赖该新Module。又由于Module A是依赖于Library B的,所以不能再让Library B来依赖Module A来达到使用x.jar的目的,否则会出现循环依赖的问题。
(4)最终解决方案
整体的项目结构没有改变,还是

只是在Library B的build.gradle文件中添加了如下依赖
implementation files('../Module A/libs/x.jar')
这样问题就解决了。
(5)总结
其实该问题的思路很简单,就是让Library B直接引用 Module A/libs/x.jar。之所以最开始没想到这一点,主要还是因为在这个依赖需要手写,而不能在AS中配置后自动生成,一般配置路径为File > Project Structure > Dependencies > Library B > Jar Dependency,如下图:

而此时在这里Android Studio无法自动给出路径提示,不能直接找到 Module A/libs/x.jar。
这也就是折腾很长时间后才找到这个方法的原因,所以这里特别记录一下,也许能帮到碰到相同困扰的同仁。
Android开发中导入第三方库所遇问题记录的更多相关文章
- Android Studio中导入第三方库
之前开发Android都是使用的eclipse,近期因为和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的 ...
- json库的编译方法和vs2010中导入第三方库的方法
json库的编译方法和vs2010中导入第三方库的方法 一.去相应官网下载json.cpp文件 Jsoncpp下载:https://sourceforge.net/projects/jsoncpp/ ...
- 详细地jsoncpp编译方法 和 vs2010中导入第三方库的方法
详细地jsoncpp编译方法 和 vs2010中导入第三方库的方法 一 编译链接 1 在相应官网下载jsoncpp 2 解压得到jsoncpp-src-0.5.0文件 3 打开jsoncpp-src- ...
- Android开发中常用的库总结(持续更新)
这篇文章用来收集Android开发中常用的库,都是实际使用过的.持续更新... 1.消息提示的小红点 微信,微博消息提示的小红点. 开源库地址:https://github.com/stefanjau ...
- Android studio中导入第三方类库
常常在github上看到一些好用的框架,但是对于一个新手怎样在android studio上导入去总会遇到各种麻烦,索性来研究下第三方类库怎样在android studio上导入. 以我在github ...
- Android开发----EditText&ImageView&第三方库的加载
EditText组件 一个实例描述该组件的全部属性(虚假的登录界面) 在activity.xml中 <?xml version="1.0" encoding="ut ...
- 如何向android studio中导入第三方类库
下面分两种情况介绍一下如何导入第三方类库. 1.对于jar的类库,直接复制进libs目录,然后把jar复制进去,然后File->Project Structure,然后选中主module的名称, ...
- iOS开发中常用第三方库的使用和配置-GDataXML
这篇文章旨在给自己以后需要时能及时的查到,省得每次都去baidu. 1. xml解析库-GDataXML 参考文章:http://blog.csdn.net/tangren03/article/det ...
- 对于pod导入第三方库文件终端语言记录
//换成 pod install --verbose --no-repo-update //生成Podfile文件 touch Podfile 加上--verbose --no-repo-update ...
随机推荐
- Robot Framework(4)——Selenium2Library关键字
在第一讲的时候,已经安装了Selenium2Library这个库,这一篇主要来整理介绍一下Selenium2Library中的常用关键字,为我们之后的web自动化打好基础 一.browserManag ...
- Docker 安装及配置镜像加速
Docker 版本 随着 Docker 的飞速发展,企业级功能的上线,更好的服务意味着需要支付一定的费用,目前 Docker 被分为两个版本: community-edition 社区版 enterp ...
- SPSSAU数据分析思维培养系列3:分析思路篇
本文章为SPSSAU数据分析思维培养的第3期文章. 上文讲解如何选择正确的分析方法,除了有正确的分析方法外,还需要把分析方法进行灵活运用.拿到一份数据,应该如何进行分析,总共有几个步骤,第一步第二步应 ...
- 配置tomacat外部应用
原来我们的项目一般放置在tomcat文件夹的webapp下,现在我放到外面,也希望tomact可以找到他
- .NET ORM 分表分库【到底】怎么做?
理论知识 分表 - 从表面意思上看呢,就是把一张表分成N多个小表,每一个小表都是完正的一张表.分表后数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面.分表后单表的并发能力提高了 ...
- 关于华为服务器 双路E52620安装系统时遇到的问题
一 准备好u盘启动盘,centos7的,用UltraISO制作启动盘 双击图标 进入 点击启动下的刻录磁盘映像 几分钟之后制作完场 二 :按装centos7的系统 1 首先将 u盘插到服务器上 2 ...
- 谁告诉的你们Python是强类型语言!站出来,保证不打你!
1. 真的能用隐式类型转换作为强弱类型的判断标准吗? 最近有些学员问我,Python到底是强类型语言,还是弱类型语言.我就直接脱口而出:Python是弱类型语言.没想到有一些学员给我了一些文章,有 ...
- Event loop详解(包含Node端)
Event loop事件循环,是一个执行模型.不同的浏览器以及Nodejs里的具体实现是不一样的. 一,浏览器端: HTML5规范里有明确定义,简单的说: 1,JS是单线程的,执行的时候在一条主栈上: ...
- Python画图库Turtle库详解篇
Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...
- Sql 注入----学习笔记
先了解下CRLF,CRLF常用在分隔符之间,CR是carriage retum(ASCII 13,\r) LF是Line Feed (ASCII 10,\n), \r\n这两个字符类似于回车是用于换行 ...