一、引入开源项目的方式

使用开源项目 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
}

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

  1. 第一篇博客 安装open live writer

    第一篇博客安装open live writer http://openlivewriter.org/ 有的人可能会打不开,所以我准备了一个百度云的链接地址 链接:https://pan.baidu.c ...

  2. 我的第一篇博客:vue-cli配置项目

    注意:在安装vue-cli之前一定要确保安装了node和vue 安装配置node:下载node(https://nodejs.org/en/)然后一路无脑安装 查看安装是否成功:node –versi ...

  3. 项目冲刺Beta第一篇博客

    Beta版本冲刺计划安排 1.当天站立式会议照片: 2.工作分工: 团队成员 分工 张洪滨060  排行榜界面美化 陈敬轩059  注册成功界面美化 黄兴067  登录界面美化 林国梽068  答题界 ...

  4. 欢迎阅读daxnet的新博客:一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

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

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

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

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

    欢迎阅读daxnet的新博客:一个基于Microsoft Azure.ASP.NET Core和Docker的博客系统   2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客 ...

  7. 解决基于BAE python+bottle开发上的一系列问题 - artwebs - 博客频道 - CSDN.NET

    解决基于BAE python+bottle开发上的一系列问题 - artwebs - 博客频道 - CSDN.NET 解决基于BAE python+bottle开发上的一系列问题 分类: python ...

  8. 鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 百篇博客分析OpenHarmony源码 | v54.01

    百篇博客系列篇.本篇为: v54.xx 鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 51.c.h.o 下图是一个可执行文件编译,链接的过程. 本篇将通过一个完整的小工程来阐述E ...

  9. 鸿蒙内核源码分析(信号生产篇) | 信号安装和发送过程是怎样的? | 百篇博客分析OpenHarmony源码 | v48.03

    百篇博客系列篇.本篇为: v48.xx 鸿蒙内核源码分析(信号生产篇) | 年过半百,依然活力十足 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管 ...

随机推荐

  1. poj 3321

    题目链接 题意:一开始1-n都有苹果,Q查询以x为根下存在多少. 树状数组+DFS+队列转换 这题纠结了2天,一开始一点思路都没有,看大神都是吧树状数组转换成队列来做 看了好久都不知道怎么转换的, 解 ...

  2. 自己实现的简单MVC框架(类似Struts2+Spring)

    一.框架简介 本框架是一个类似于Struts2+Spring的框架,目的在于个人钻研和技术分享,将流行技术框架Struts2.Spring中使用到的主要技术以较为简化的方式实现出来,给大家一个更直观的 ...

  3. Activity的onSaveInstanceState()和onRestoreInstanceState()方法

    首先Android的Activity生命周期如下图: Activity的onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,他们不同于onC ...

  4. java二维码开发

    之前就写过很多关于二维码的东西,一直没有时间整理一下,所以呢今天就先来介绍一下如何利用java开发二维码.生成二维码有很多jar包可以实现,例如Zxing,QRcode,前者是谷歌的,后者日本的,这里 ...

  5. 二叉排序树的创建删除中序输出&&平衡树

    #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #inclu ...

  6. cocos2d-x 3.0rc开发指南:Windows下Android环境搭建

    安装工具 1. 配置JDK JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 本人的系统是Win7 ...

  7. 安卓查询当前所在地天气及查询地区(城市)代码cityCode localCode

    源码可获取用户当前位置的天气情况 本代码最有价值的部分在于关于城市码的获取,我用了两个小时才将全国主要城市的编码整理成HashMap,下载即可用! 试一试:点击下载. ---------------- ...

  8. oracle生成随机数

    UPDATE busi_chance_info t    SET t.exp_amount =        (SELECT floor(dbms_random.value(1, 10000000)) ...

  9. 修改 “嗨加游-Prefix.pch” 或者 “嗨加游-Info.plist ” 方法

    如果要更改Info.plist与Prefix.pch文件实际路径,也就是实际文件的位置(不是在工程中的组织路径),需要到Build Settings中修改对应的配置,不然工程就找不到对应的Info.p ...

  10. iOS开发-单例模式的解读

    现在网上的有很多人写单例模式,一个很基本的东西但是版本也有很多,新人看了难免有些眼花缭乱的感觉.自己最新比较闲,也过来写一些自己的心得. 在往下看之前,我们要明白一点,那就是在什么情况下我们才要用到单 ...