Случайный сбой теста с нативным сбоем - PullRequest
0 голосов
/ 26 июня 2018

Я запускаю тестовый набор эспрессо для своего приложения на эмуляторе. Я вижу случайные сбои со следующим выводом logcat:

06-26 08:58:51.129  info    WebViewFactory  Loading com.android.webview version 44.0.2403.119 (code 246011960)
06-26 08:58:51.136  warn    System  ClassLoader referenced unknown path: /system/app/webview/lib/x86
06-26 08:58:51.139  info    LibraryLoader   Time to load native libraries: 1 ms (timestamps 9447-9448)
06-26 08:58:51.139  info    LibraryLoader   Expected native library version number "",actual native library version number ""
06-26 08:58:51.145  warn    art Attempt to remove non-JNI local reference, dumping thread
06-26 08:58:51.145  warn    art --------- beginning of crash
06-26 08:58:51.157  assert  libc    Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 23449 (myapp.com/...)

Эти сбои происходят случайным образом при сборе около 300 тестовых случаев. Прикрепление частей файла app build.gradle, которые, я думаю, могут иметь отношение к делу. (Кроме того, эти сбои начали появляться после того, как я перевел gradle с 2.1.2 на 3.1.1). Также добавлены зависимости проекта.

android {
    compileSdkVersion 27
    buildToolsVersion '27.0.3'

    defaultConfig {
        applicationId = BuildVars.applicationId
        minSdkVersion 21
        targetSdkVersion 23
        versionCode minutesSinceEpoch()
        versionName "${Version.packageVersion()}"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true

    }

    sourceSets.main {
        // use the jni .so compiled from the manual ndk-build command'''
        jniLibs.srcDirs = ['src/main/jniLibs/debug/lib', 'src/main/jniLibs/release/lib']
        jni.srcDirs = [] //disable automatic ndk-build call

    }

...

}

task ndkBuildDebug(type: Exec) {
    dependsOn swigBuild
    dependsOn getAndroidNdk
    dependsOn getAndroidAvd

    def ndkDir = PropertiesFile.getValue(project.localProperties, "ndk.dir")
    println "Your NDK appears to be in " + ndkDir

    def numCompileThreads = numCompilationThreads()
    println "Compiling with " + numCompileThreads + " threads "
    commandLine Shell.getShellCommandLine("${ndkDir}/ndk-build -j ${numCompileThreads} -C src/main/jni NDK_DEBUG=1 " +
            "NDK_OUT=../../../build/intermediates/ndk/debug/obj NDK_LIBS_OUT=../jniLibs/debug/lib"
    )
}


spoon {
    noAnimations = true

    def envSerial = System.env['ANDROID_SERIAL'];
    if (envSerial) {
        devices = [envSerial];
    }
    if (project.hasProperty('spoonClassName')) {
        className = project.spoonClassName
    }
    if (project.hasProperty('spoonMethodName')) {
        methodName = project.spoonMethodName
    }
    debug = true
    adbTimeout = 10*60
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    compile("com.appX:appX-android:$serializableLibVersion") {
        transitive = false
    }
    compile("com.appX:appX-primogenitor:$serializableLibVersion") {
        transitive = false
    }
    compile("com.appX:appX-serialize-common:$serializableLibVersion") {
        transitive = false
    }

    compile "com.android.support:support-v13:27.1.0"
    compile "com.android.support:appcompat-v7:27.1.0"
    compile 'com.android.support:recyclerview-v7:27.1.0'
    compile 'com.android.support:cardview-v7:27.1.0'
    compile 'com.android.support:design:27.1.0'
    compile 'com.android.support:percent:27.1.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.google.android.gms:play-services-base:10.2.1'
    compile 'com.google.android.gms:play-services-analytics:10.2.1'
    compile 'com.google.android.gms:play-services-gcm:10.2.1'

    compile 'com.jakewharton:butterknife:8.1.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.1.0'
    compile 'com.jakewharton.timber:timber:3.1.0'
    compile 'com.squareup:otto:1.3.8'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    compile 'com.squareup.retrofit2:converter-jackson:2.0.0'
    compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.6.1'
    compile 'com.google.code.gson:gson:2.6.2'


    compile 'com.squareup.okhttp3:okhttp:3.8.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'

    compile 'com.google.guava:guava:18.0'
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'io.reactivex.rxjava2:rxjava:2.1.0'

    compile 'commons-lang:commons-lang:2.6'
    compile 'org.slf4j:slf4j-api:1.7.13'
    compile 'com.melnykov:floatingactionbutton:1.3.0'
    compile 'net.danlew:android.joda:2.7.2'
    compile 'uk.co.chrisjenx:calligraphy:2.1.0'
    compile 'frankiesardo:icepick:3.2.0'
    compile 'com.mikhaellopez:circularimageview:3.0.2'

    api 'frankiesardo:icepick:3.2.0'
    compileOnly 'frankiesardo:icepick-processor:3.2.0'
    annotationProcessor 'frankiesardo:icepick-processor:3.2.0'

    compile('com.crashlytics.sdk.android:crashlytics:2.5.1@aar') {
        transitive = true;
    }


    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
        exclude module: 'support-annotations'
    }

    androidTestCompile('com.android.support.test.espresso:espresso-idling-resource:2.2.2') {
        exclude module: 'support-annotations'
    }

    androidTestCompile "com.squareup.spoon:spoon-client:2.0.0-SNAPSHOT" // For Spoon snapshot, until 2.0.0 is released

    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude group: 'com.android.support', module: 'support-v4'
        exclude group: 'com.android.support', module: 'design'
        exclude group: 'com.android.support', module: 'recyclerview-v7'
    }
}

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Проблема была в эмуляторе API 23 Intel Atom x86 на тестовом компьютере (который датируется довольно давно), когда я заменил его на эмулятор API 23 Google x86 "и" указал системный каталог на образ системы в последнем SDK ( 27.1) До сих пор я больше не видел эту ошибку.

${SDK_DIR}/tools/emulator -no-boot-anim -sysdir /Users/jenkins/build_tools/android-sdk-27.1/system-images/android-23/google_apis/x86_64 -avd Nexus_9_API_23 > /dev/null 2>&1 &
0 голосов
/ 26 июня 2018

Спасибо, что включили то, что я спросил.

  1. Это может быть неуместно, но вы должны использовать «реализацию» вместо «компилировать», так как ключевое слово compile устарело. Вы должны также использовать «androidTestImplementation». Может быть, это вызывает конфликт с Gradle 3? Возможно нет. Впрочем, это может стоить того.

  2. Попробуйте добавить это в приложение: gradle

    android {
    
    ...
    
        testOptions {
            unitTests.all {
                // All the usual Gradle options.
                jvmArgs('-ea', '-noverify')
            }
            unitTests {
                returnDefaultValues = true
            }
        }
    
    ...
    
    }
    
  3. И, наконец, попробуйте очистить и перестроить свой проект. Вы также можете попытаться вручную удалить папки, которые Android Studio создает при компиляции, но это может быть немного рискованно, если вы не знаете, что делаете. Хотя я думаю, что некоторые старые, бесполезные вещи могут вызывать конфликты с тем, что у вас сейчас есть.

...