代码之家  ›  专栏  ›  技术社区  ›  Ammar Hussein

单元测试的测试用例成功,但插入指令的测试失败,错误为NoSuchMethodError

  •  0
  • Ammar Hussein  · 技术社区  · 7 年前

    我有一个java maven库,我想在我的Android应用程序中使用它( This 是图书馆吗 当我试着开始一门课,比如 ZoldWts api = new RestfulZoldWts("key"); 我没有发现任何错误。

    JAVAlang.NoSuchMethodError:没有直接方法(Ljava/util/Collection;)V类Lorg/apache/http/client/protocol/RequestDefaultHeaders;或者它的超类(声明'org.apache.http.client.protocol.RequestDefaultHeaders'出现在/system/framework/org.apache.http.legacy.boot.jar中)

    我是如何将图书馆添加到我的成绩中的? compile 'com.amihaiemil.web:zold-java-client:0.0.1' 然而,我得到了以下错误

    发现多个文件具有独立于操作系统的路径“META-INF/DEPENDENCIES”

    我把这个加到我的梯度上解决了这个问题

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
    }
    

    为了确保库没有损坏,我编写了一个单元测试并成功运行。不幸的是,仪器化测试没有。 我试着让proguard瘫痪 useProguard false 没用。 我还尝试在我的proguard规则中添加以下内容

    -保持类org/apache/http/client/protocol/*{ *; }

    还是不行。

    我的gradle文件:

    apply plugin: 'com.android.application'
    
    android {
        packagingOptions {
            exclude 'META-INF/DEPENDENCIES'
        }
        compileSdkVersion 28
        defaultConfig {
            applicationId "com.zold.ammar.zold_android"
            minSdkVersion 26
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
        implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'androidx.test:runner:1.1.1'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    
        // Zold Java
        compile 'com.amihaiemil.web:zold-java-client:0.0.1'
    }
    

    我的测试代码(完全相同的代码在单元测试中工作,但在仪器化测试中不工作)

    @Test
    public void zoldinittest() {
        ZoldWts api = new RestfulZoldWts("key");
        assertNotNull(api);
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   wholegroup    7 年前

    从…起 here

    内置的。gradleandroid部分放了这个代码

    useLibrary 'org.apache.http.legacy'

        2
  •  0
  •   Ammar Hussein    7 年前

    通过将Apache版本更改为5,问题得以解决。x英寸 zold-java-client This This 问题显示了所有讨论,解决方案在库的0.0.2版本中提供。