长时间执行测试后,由于“进程崩溃”,导致仪表运行失败。

8

我需要执行大约700个测试,但是当我运行它们时,大约在执行第360-370个测试的时候,就会出现崩溃。

"由于'进程崩溃'导致仪器运行失败。请检查设备日志以获取详细信息。测试运行失败:由于'进程崩溃'导致仪器运行失败。"

这个问题发生在测试执行了约10分钟后。

设备使用的是安卓4.1.1系统的三星S3,可以从Android Studio或cmd(在PC和Mac上)中运行。

build.gradle文件如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 18
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.xxx.yyy"
        minSdkVersion 9
        targetSdkVersion 18

        testApplicationId "com.xxx.zzz"
        testInstrumentationRunner "android.test.InstrumentationTestRunner"
    }

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

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

    project.gradle.taskGraph.whenReady {
        connectedAndroidTestDebug  {
            ignoreFailures = true
        }
    }
}


repositories {
    // The local cache should be used first
    mavenLocal()

    jcenter()
    mavenCentral()
}

dependencies {
    compile 'junit:junit:4.12'

    compile fileTree(include: '*.jar', dir: 'libs')
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxx.yyy"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.CAMERA.autoFocus" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <application
        android:allowBackup="true"
        android:largeHeap="true"
        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name="com.xxx.yyy.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="roboguice.annotations.packages"
            android:value="com.xxx"/>
        <meta-data
            android:name="roboguice.modules"
            android:value="com.xxx.yyy.MainModule"/>
    </application>

</manifest>

还有一点需要补充:在我之前发布的代码中,没有发生这种崩溃,但我找不到具体的更改是导致崩溃的原因。

请帮我解决这个问题,我已经花了两个星期努力理解它。


能否隔离出导致崩溃的确切测试? - Chaosit
1
不能确定测试会崩溃。我试图删除这个测试和测试类,但仍然出现崩溃,只是在其他测试中发生。如果我单独运行它们,就不会崩溃。 - pbelov
2个回答

3
我不知道这个问题对你来说是否仍然存在,但我自己也遇到了这样的问题。 在某些三星设备的Android版本中存在一个错误:它们没有正确关闭文件描述符,从而导致文件描述符泄漏。当创建1028个描述符后,进程会崩溃。
为了避免这种情况,在我的测试中,我必须减少对HandlerThreads的使用,并在可能的情况下重复使用它们。但更好的解决方案可能是更换设备。 http://code.google.com/p/android/issues/detail?id=32470

0

尝试在更新的Android操作系统上运行仪器测试,例如Android 5.1(API 22)或更高版本。一些旧版本,如Android 4.1,在ARM模拟器上会出现此类崩溃。

或者尝试更新项目中使用的Gradle版本。例如,Gradle 4.1会出现此问题,但gradle 4.10不会。

另外,尽量避免在后台运行测试,其中没有启动任何Activity。因此,避免使用ActivityUnitTestCaseSingleLaunchActivityTestCase,这可能会导致Android 4.1上的本机C ++崩溃。更多信息请参见:Native crash at /dev/ashmem/dalvik-jit-code-cache


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接