Случайный сбой теста с нативным сбоем

Я запускаю тестовый набор эспрессо против моего приложения на эмуляторе. Я вижу случайные сбои со следующим выводом 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 ответа

Решение

Проблема заключалась в том, что эмулятор API 23 Intel Atom x86 на тестовой машине (который датируется довольно давно) был задуман, когда я заменил его на эмулятор API 23 Google x86 API "и" указал системный каталог на образ системы в последнем 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 &

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

  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 создает при компиляции, но это может быть немного рискованно, если вы не знаете, что делаете. Мой процесс заключается в том, что могут быть некоторые старые, бесполезные вещи, которые вызывают конфликты с тем, что у вас есть сейчас.

Другие вопросы по тегам