错误:json定义了与Android现在提供的类冲突的类

23

在使用Android Studio 3进行发布构建时,我遇到了以下错误:

Error:Error: json定义的类与Android现在提供的类发生冲突。解决方法包括寻找更新版本或没有相同问题的替代库(例如,对于httpclient,请使用HttpUrlConnection或okhttp),或者使用jarjar等工具重新打包库。[DuplicatePlatformClasses]

以下是我的依赖关系:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.0.1'
    compile 'com.android.support:support-v4:26.0.1'
    compile 'org.greenrobot:eventbus:3.0.0'
    compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:+'
    compile 'com.evernote:android-job:1.2.0'
    compile 'com.amitshekhar.android:android-networking:1.0.0'
    compile 'com.facebook.stetho:stetho:1.5.0'
    compile "me.tatarka.redux:redux-core:0.10"
    compile "me.tatarka.redux:redux-android:0.10"
    compile "me.tatarka.redux:redux-android-lifecycle:0.10"
    compile "me.tatarka.redux:redux-thunk:0.10"
    annotationProcessor "org.immutables:value:2.5.5" // <-- for annotation processor
    provided "org.immutables:value:2.5.5" // for annotations
    provided "org.immutables:builder:2.5.5" // for annotations

    compile "me.tatarka.redux:redux-monitor:0.10"
    testCompile 'junit:junit:4.12'
}

它说是json,但我找不到上述依赖项中哪一个导致了问题。

当我运行时,这是我得到的:

gradlew assembleRelease

任务 :app:lintVitalRelease /Users/kruyvanna/Projects/key/HappyKey_Android2/app/build.gradle: 错误: json 定义的类与 Android 提供的类冲突。解决方案包括查找更新版本或没有相同问题的替代库(例如,对于 httpclient,请改用 HttpUrlConnection 或 okhttp),或使用 jarjar 等工具重新打包库。[DuplicatePlatformClasses]

"DuplicatePlatformClasses" 类型问题的解释: 有一些库不仅复制了 Android 平台的功能,而且使用与 Android 提供的相同的类名,例如 apache http classes。这可能导致意外崩溃。

要解决此问题,您需要找到一个不再存在此问题的库的更新版本,或者使用像 jarjar 工具这样的工具重新打包库(及其所有依赖项),或最后,重写代码以使用不同的 API(例如,对于 http 代码,请考虑使用 HttpUrlConnection 或类似 okhttp 的库)。

1 个错误,0 个警告

构建失败,出现异常。

  • 出错了: 执行任务':app:lintVitalRelease'失败。

    在组装发布目标时,Lint发现了致命错误。

    要继续,请修复Lint识别出的问题或按以下方式修改构建脚本: ... android { lintOptions { checkReleaseBuilds false // 或者,如果您愿意,在发布构建中继续检查错误, // 但即使发现错误也要继续构建: abortOnError false } } ...

  • 尝试: 使用--stacktrace选项运行以获取堆栈跟踪。 使用--info或--debug选项运行以获取更多日志输出。

  • 获取更多帮助,请访问https://help.gradle.org


你使用什么构建工具? - Lino
我正在使用Android Studio。点击“Build -> Generate Signed APK”。 - vanna
你解决了这个问题吗?我也遇到了同样的问题。 - Hong
1
@Hong 是的。请看下面我的回答 https://dev59.com/bFYN5IYBdhLWcg3wuKG5#47019266 - vanna
谢谢。我猜你通过移除依赖项解决了问题。我看到了答案,但是不确定你做了什么。我希望有一种不需要移除任何依赖项的解决方案。 - Hong
你好,我在这一行代码 "org.json:json:20160212" 遇到了错误 - Error:(51) Error: json 定义的类与 Android 现在提供的类冲突。解决方案包括查找更新版本或没有相同问题的替代库(例如,对于 httpclient,请使用 HttpUrlConnection 或 okhttp),或者使用 jarjar 等工具重新打包库。在从 AndroidStudio 创建签名 APK 时出现 [DuplicatePlatformClasses] 错误。请帮帮我。谢谢。 - Naveen
4个回答

31

我通过添加以下内容来解决了这个问题:

configurations {
    all {
        exclude group: 'org.json', module: 'json'
    }
}

对于模块的Gradle文件,不需要删除依赖项。


app/build.gradle 内部 - omarwaleed

5
在你的app/build.gradle中添加以下内容。
configurations {
    all {
        exclude module: 'commons-logging'
    }
}

1

打开命令行并查看依赖树。这将为您提供应用程序使用的所有内容列表:

./gradlew dependencies

5
如果显示为“No configurations”,则改为执行“./gradlew app:dependencies”。 - starbeamrainbowlabs

0

我逐一添加依赖项,发现其中一个引起了错误。

compile "me.tatarka.redux:redux-monitor:0.10"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接