Android - 导入jar文件时定义的多个dex文件

时间:2015-05-25 17:08:36

标签: android gradle android-gradle

我正在尝试将caldav4j库(caldav4j-0.7.jar)导入到我的android studio项目中。我的build.gradle文件中有以下两行。

compile 'org.mnode.ical4j:ical4j:1.0.6'
compile files('libs/caldav4j-0.7.jar')

由于ical4j库,我看到多个dex文件定义错误,因为caldav4j-0.7.jar还将ical4j库定义为maven依赖项。

<dependency>
  <groupId>net.fortuna.ical4j</groupId>
  <artifactId>ical4j</artifactId>
  <!--version>1.0-rc1-SNAPSHOT</version--><!-- patched on localhost-->
  <version>1.0</version>
</dependency>

如果我尝试不删除第一行,则单独导入ical4j,

compile 'org.mnode.ical4j:ical4j:1.0.6'

然后我根本无法访问ical4j包。我想要实现的是能够从ical4j包导入任何类。 maven项目不暴露其依赖项包是否正常?那么我应该如何在我的项目中使用 ical4j ?如果我从build.gradle中删除该行,则ical4j库的所有import语句都会失败。

import net.fortuna.ical4j.model.Component;
import net.fortuna.ical4j.model.ComponentList;
import net.fortuna.ical4j.model.component.VEvent;

简而言之:

我想导入 ical4j 库,但

  1. 如果因为与caldav4j.jar中定义的内部依赖项冲突而单独向build.gradle添加一行,它会给我多个dex文件定义错误

    < / LI>
  2. 如果删除该行,我根本无法访问ical4j库,因为caldav4j.jar不会公开其依赖项。

  3. 提前感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

这应该是一个评论,因为我不确定,但它太长了。如果错误,我会删除它。

首先,您应该能够使用gradle依赖项导入caldav4j库。

caldav4j个回购添加到build.gradle

repositories {
    mavenCentral()
    maven { url "https://caldav4j.googlecode.com/svn/maven" }    
}

然后你可以使用

compile('org.osaf:caldav4j:0.7') {
        exclude group: 'net.fortuna.ical4j', module: 'ical4j'
    }

但是我不确定它是否可行,因为我不知道1.0.6是否与pom file中的1.0完全兼容:

<dependency>
      <groupId>net.fortuna.ical4j</groupId>
      <artifactId>ical4j</artifactId>
      <!--version>1.0-rc1-SNAPSHOT</version--><!-- patched on localhost-->
      <version>1.0</version>
    </dependency>

答案 1 :(得分:1)

看看这个答案,它几乎告诉你如何列出什么是冲突的,

Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat

运行gradle -q dependencies(或gradle -q:projectName:dependencies)以生成依赖关系报告。您应该看到r7的来源,例如:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    |    \--- com.google.android:support-v4:r7
|    +--- com.commonsware.cwac:camera:0.5.4
|    \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

然后,使用exclude指令来阻止该依赖项。

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

(其中第二个编译语句指示您实际需要的版本)