一、引入开源项目的方式

使用开源项目 MultiType 的两种方式:

1、maven引入:在主Module 的 build.gradle 中加入

dependencies {
    ......
    compile 'me.drakeet.multitype:multitype:2.3.0'}

2、创建为 library 包:在 https://github.com/drakeet/MultiType/releases 将开源项目 MultiType 下载下来,将其中的 library 包复制拷贝到与主 Module 同个目录下并重命名为 multitype 如下:

项目目录:

接着,修改 重命名为 multitype 后的文件夹下的 build.gradle 为

apply plugin: 'com.android.library'

最后,在主Module 中引入该 libaray,如下:

dependencies {    ......
    compile project(':multitype')
}

注意: maven 引入时若指定的 sdk最低版本 与开发的项目的 sdk最低版本 冲突则要在主Module (似乎是在这里,忘了)的中覆盖引入项目的编译版本。创建 library 包时则可以直接在该 library 包的 build.gradle 文件中修改这个开源项目的 sdk编译版本。无论哪种方式都要注意 主Module的 sdk最低版本 不能低于 开源项目的 sdk最低版本,不然当手机的版本低于 开源项目的 最低版本则用不了这个开源项目。

例子:公司项目中的 minSdkVersion 8  而 开源项目的 minSdkVersion 9  ,只能修改 公司项目的 minSdkVersion 为 9。

  二、两种方式各自出现的问题如下:

1、sdk最低版本冲突:开源项目指定的 sdk最低版本 与开发的项目的 sdk最低版本 冲突。提示如下:

Error:Execution failed for task ':xxx:processXxxDebugManifest'.
> Manifest merger failed with multiple errors, see logs

2、依赖包重复:开源项目需要用 RecyclerView,为兼容低版本的系统,引入了 v7包(目录结构如下:)中的 recyclerview 的包。

开源项目中的 build.gradle 中的依赖如下:

dependencies {    testCompile 'junit:junit:4.12'    compile 'com.android.support:support-annotations:24.2.1'    compile 'com.android.support:recyclerview-v7:24.2.1'}

而 RecyclerView 的使用是依赖于 v4 包的。而公司项目中有将 v7 中的 v4的jar包(v4的jar包下含 annotation 和 v4)引入单独成为一个 library 包,这会于引入的 开源项目的依赖包()重复。

公司项目将 v7 自成一个 library 包如下:

错误提示:

Error:Execution failed for task ':taojinroad:transformClassesWithJarMergingForXxxDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/IntegerRes.class

  三、解决方法

maven 引入的解决方法

1、sdk最低版本冲突

要在主Module (似乎是在这里,忘了)的中覆盖引入项目的 minSdkVersion 。前提是主 Module 的 minSdkVersion 不能低于 开源项目的 minSdkVersion,否则在 系统版本 太低的手机上无法使用这一开源项目。

2、依赖包重复

将开源项目中的依赖包去掉,如下:

dependencies {
    ......
    compile ('me.drakeet.multitype:multitype:2.3.0'){
    exclude group: 'com.android.support', module: 'support-v4'    exclude group: 'com.android.support', module: 'support-annotations'
  }}

创建开源项目为 library 包的解决方法

1、sdk最低版本冲突

可以修改 主 Module 的 minSdkVersion 或 开源项目的 minSdkVersion 使它们一致。前提是主 Module 的 minSdkVersion 不能低于 开源项目的 minSdkVersion,否则在 系统版本 太低的手机上无法使用这一开源项目。

2、依赖包重复

前提:library 包中含 build.gradle 文件且可在里面修改相应的依赖。也就是说不能将 开源项目的 jar包 或 aar包 直接引入成为一个 library(上面提到的 公司里的创建的一个 v7 的 library 包就是这种情况。以 jar包形式引入则无法在 build.gradle 中看到引入的依赖,因此无法修改这些依赖),而应该直接将源代码引入成为一个 library 包。如下:

不能用此方法的:

可用此方法的:

将 build.gradle 中的

dependencies {    testCompile 'junit:junit:4.12'    compile 'com.android.support:support-annotations:24.2.1'    compile 'com.android.support:recyclerview-v7:24.2.1'}

修改为
dependencies {    testCompile 'junit:junit:4.12'    //    compile 'com.android.support:support-annotations:24.2.1'    //    compile 'com.android.support:recyclerview-v7:24.2.1'    compile('com.android.support:recyclerview-v7:23.2.1') {//注意:这里的RecyclerView 的版本与 v7的 library中的 v4包的版本一样是 23.2.1//        exclude group: 'com.android.support'//这个是 exclude 掉所有 support 包        exclude group: 'com.android.support', module: 'support-v4'        exclude group: 'com.android.support', module: 'support-annotations'    }    compile project(':android-support-v7-appcompat')//这是 v7 的 library包 含 v4 和 annotation }

转载于:https://www.cnblogs.com/cheneasternsun/p/6212471.html

安装开源项目 MultiType (基于 RecyclerView)出现的各种问题 -- 自己的第一篇博客...相关推荐

  1. 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网" ...

  2. python3语音识别模块_『开源项目』基于STM32的智能垃圾桶之语音识别

    大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了『开源项目』基于STM32的智能垃圾桶之成员简介,相信有很多小伙伴都已经忍不住跃跃欲试了,别着急,从这一篇开始,笔者将会带领大家一 ...

  3. stm32语音识别文字显示_『开源项目』基于STM32的智能垃圾桶之语音识别

    大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了『开源项目』基于STM32的智能垃圾桶之成员简介,相信有很多小伙伴都已经忍不住跃跃欲试了,别着急,从这一篇开始,笔者将会带领大家一 ...

  4. 基于hexo框架快速从0到1搭建个人博客----文章写作(四)

    基于hexo框架快速从0到1搭建个人博客----文章写作 一.Github图床(图片存储) 二.PicGo(图片上传) 三.jsDelivr(CDN加速) 四.Typora(写文传图) 五.总结 一. ...

  5. 鸿蒙关键技术研究,鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 百篇博客分析HarmonyOS源码 | v54.02...

    百篇博客系列篇.本篇为: 下图是一个可执行文件编译,链接的过程. 本篇将通过一个完整的小工程来阐述ELF编译,链接过程,并分析.o和bin文件中各区,符号表之间的关系.从一个崭新的视角去看中间过程,阅 ...

  6. Redis Primer(1)基于JedisPool的Redis hset并发性能测试 - @钟超 · 技术博客专栏 - 博客频道 - CSDN.NET...

    Redis Primer(1)基于JedisPool的Redis hset并发性能测试 - @钟超 · 技术博客专栏 - 博客频道 - CSDN.NET Redis Primer(1)基于JedisP ...

  7. python语言磁力搜索引擎源码公开,基于DHT协议,十二分有技术含量的技术博客...

    之前我在写百度网盘爬虫,百度图片爬虫的时候答应网友说,抽时间要把ok搜搜的的源码公开,如今是时候兑现诺言了,下面就是爬虫的所有代码,完全,彻底的公开,你会不会写程序都可以使用,不过请先装个linux系 ...

  8. python pip安装第三方包速度慢,这篇博客给你安排清楚了

    文章目录 ⛳️ 实战场景 ⛳️ pip 国内高速源 首推清华源 其它源 永久配置源 ⛳️ 实战场景 作为 Python 的初学者,经常要用到第三方模块的安排,常规情况下,直接使用下述命令,然后就等待去 ...

  9. 初出茅庐的小李第113篇博客项目笔记之机智云智能浇花器实战(2)-基础Demo实现

    初出茅庐的小李第112篇博客项目笔记之机智云智能浇花器实战(1)-基础Demo实现 接(1) 继电器实现 继电器原理图 继电器采用的是5V继电器,控制端是RELAY-1 继电器代码实现 #includ ...

最新文章

  1. 关于Background-size的几个参数区别
  2. SonarQube代码质量管理工具的安装(Linux)
  3. 【编码问题】‘utf-8‘ codec can‘t decode byte 0xce in position 0
  4. html弹性盒子自适应比例,CCS弹性盒子中间自适应怎么设置
  5. function与感叹号
  6. 永久的CheckBox(单选,全选/反选)!
  7. 使用so动态链接库g++正确,gcc undefined reference错误
  8. 打开IE8总是提示欢迎使用?怎样使它不提示?
  9. InputFilter实现EditText文本输入过滤器
  10. 栅栏密码(Fence)——python解密
  11. Mybatis插件原理
  12. 神经元模型和BP网络
  13. iOS之推荐六款不错的 iOS 15 Safari 浏览器扩展
  14. 由一次不断GC并耗费过长的时间所想到的工具 - jvmkill与jvmquake
  15. 串的基本操作与KMP算法
  16. “智慧统计”平台研发
  17. 微信上收到的文件怎么打印出来
  18. js时间格式转换收录
  19. c# Npoi导出Excel并合并行列
  20. 服务器重装系统后网不通,服务器出现死机网络ping不通等问题处理

热门文章

  1. 生成对抗网络简介(包含TensorFlow代码示例)【翻译】
  2. es创建索引库,无法使用InetSocketTransportAddress
  3. Kafka基础知识入门
  4. 全连接where 取最新日期_SQL学习笔记(4)——集合、连接与窗口函数
  5. python locust 能压测数据库_深入浅出 Locust 实现
  6. python列表内数字排序_如何在Python中手动排序数字列表?
  7. 数学之美 系列十六(上) 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型
  8. C++的黑科技之进制转换
  9. 荒岛野人[exgcd]
  10. @jsonfield注解_好了,不装了,撸个注解有什么难的!