繁体   English   中英

java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.toImmutableSet() 即使使用“com.google.guava:guava:24.0-android”

[英]java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.toImmutableSet() even with 'com.google.guava:guava:24.0-android'

我正在尝试通过 appium 启动一个 android 应用程序,但出现此错误。 详情如下:

我在我的 mac 机器上安装了 appium 服务器。 它为 android 启动并在 0.0.0.0:4723 收听

我正在使用 Android Studio、gradle 和 testNG。

我在 app 文件夹中的 build.gradle 文件如下:

apply plugin: 'com.android.application'

android {
compileSdkVersion project.ext.myCompileSdkVersion
buildToolsVersion project.ext.myBuildToolsVersion

defaultConfig {
    applicationId "com.company.product.test_android_app"
    minSdkVersion project.ext.myMinSdkVersion
    targetSdkVersion project.ext.myTargetSdkVersion
    multiDexEnabled true

    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

lintOptions{
    abortOnError false
}

configurations.all {
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
}

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}
}

dependencies {

testImplementation 'org.assertj:assertj-core:2.0.0'
testImplementation 'org.testng:testng:6.10'

implementation 'net.bytebuddy:byte-buddy-parent:1.7.9'
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'com.google.guava:guava:24.0-android'

implementation group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.4.6'
implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
implementation group: 'commons-logging', name: 'commons-logging', version: '1.2'
implementation group: 'org.apache.commons', name: 'commons-exec', version: '1.3'
implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.7'
implementation group: 'commons-codec', name: 'commons-codec', version: '1.10'


testImplementation 'org.seleniumhq.selenium:selenium-java:3.0.1'
testImplementation 'io.appium:java-client:5.0.4'

testImplementation 'com.googlecode.json-simple:json-simple:1.1.1'
testImplementation group: 'com.google.http-client', name: 'google-http-client', version: '1.22.0'
testImplementation group: 'com.google.http-client', name: 'google-http-client-jackson2', version: '1.22.0'

implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'

androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

手头的问题: - 应用程序很好。 - 在尝试运行我的测试时,出现以下错误:

java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.toImmutableSet()Ljava/util/stream/Collector;

at org.openqa.selenium.remote.ProtocolHandshake.streamW3CProtocolParameters(ProtocolHandshake.java:262)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:126)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:89)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:586)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:217)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:140)
at io.appium.java_client.DefaultGenericMobileDriver.<init>(DefaultGenericMobileDriver.java:38)
at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:83)
at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:93)
at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:72)
at com.company.product.test_android_app.AndroidSetup.prepareAndroidForAppium(AndroidSetup.java:24)
at com.company.product.test_android_app.LaunchApp.setUp(LaunchApp.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:515)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:217)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:144)
at org.testng.TestRunner.beforeRun(TestRunner.java:634)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:387)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1218)
at org.testng.TestNG.runSuites(TestNG.java:1133)
at org.testng.TestNG.run(TestNG.java:1104)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)
Suppressed: java.io.IOException: Incomplete document
    at com.google.gson.stream.JsonWriter.close(JsonWriter.java:559)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:144)
    ... 41 more

我已经尝试过的: - 我已经在堆栈溢出和许多其他网站上搜索过这个问题。 每个人都建议更新guava依赖的版本,但我已经有了最新版本。 不知道我错过了什么。 请帮忙。

提前致谢 :)

尝试将这些规则添加到您的 proguard 中。

-dontwarn com.google.common.base.**
-keep class com.google.common.base.** {*;}
-dontwarn com.google.errorprone.annotations.**
-keep class com.google.errorprone.annotations.** {*;}
-dontwarn com.google.j2objc.annotations.**
-keep class com.google.j2objc.annotations.** { *; }
-dontwarn java.lang.ClassValue
-keep class java.lang.ClassValue { *; }
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-keep class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement { *; }

guava-android 专为兼容 Java 7 而构建。 它没有收集器方法或流支持。

您可能可以使用普通的 Guava,而不是针对 Android,但它不会针对 Android 进行特别优化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM