5

我正在使用带有 gradle 0.5 的 android studio 0.2.3 并将 ormlite 依赖项添加到build.gradle文件中,如下所示:

compile 'com.j256.ormlite:ormlite-android:4.9'

Gradle 下载了两个 jar 文件:ormlite-android.jarormlite-core.jar. 问题是,jar 文件包含同名的类。所以我得到以下众所周知的异常:

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lcom/j256/ormlite/dao/BaseDaoImpl$1;

对于 maven存在相同问题的其他一些解决方案,建议排除ormlite-core.jar. 如果所有类ormlite-core.jar都包含在其中,这应该可以工作ormlite-android.jar- 我没有检查这个顺便说一句。在那种情况下,我不明白为什么 ormlite-core 在这个 ormlite android 依赖包中......我明确地添加了 ormlite-android,正如您在上面的代码片段中看到的那样。

但是如何在 gradle 中排除 ormlite-core.jar。我发现的一切都是针对 gradle 1.6,但 android studio 使用 gradle 0.5 - 或者这只是 android gradle 包装器的版本?

。:编辑:。为了使依赖关系更清晰,我添加了我的build.gradle文件:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.android.support:support-v4:18.0.+'
    compile 'com.android.support:appcompat-v7:18.0.+'
    compile 'com.google.android.gms:play-services:3.1.+'
    compile 'com.j256.ormlite:ormlite-android:4.9'
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }
}

为什么我认为两个 ormlite 库中有相同的类?==> 见截图。打开的包裹不一样吗?就连源头也是。我发现的唯一不同的类SqliteAndroidDatabaseTypecom.j256.ormlite.android包中的类。 打开的包裹不一样吗?

4

2 回答 2

13

您使用的 ormlite-android jar 绝对是错误的。我的猜测是有人使用导出的 ormlite-core 错误地构建了它,这就是您遇到合并冲突的原因。如果您查看 ormlite-android 的源代码,它不应该包含大多数这些包/类。

我不确定 ormlite-android 版本控制如何工作,但看起来 4.46 是实际的最新版本(2013 年 7 月 29 日更新),而不是 4.9(2011 年 1 月 26 日更新)。我建议使用 4.46 代替(这对我有用):

'com.j256.ormlite:ormlite-android:4.46'
于 2013-08-05T22:36:31.597 回答
1

感谢@cproinger 在另一个相关问题中的回答。

哇,现在可以了!我误解了版本控制(我的错)。但无论如何,较新的版本(4.46)只包含 android 特定的类ormlite-android.jarormlite-core.jar. 太好了,谢谢@cproinger!

于 2013-08-07T00:09:52.553 回答