我在模拟器上对我的应用程序运行espresso测试套件.我看到跟随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' } }
解决方法
问题是测试机器上的API 23 Intel Atom x86仿真器(可以追溯到很久以前),当我用API 23 Google API 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 &