尝试使用Gradle、Robolectric和Travis CI测试Android应用程序时出现NoClassDefFoundError

尝试使用Gradle、Robolectric和Travis CI测试Android应用程序时出现NoClassDefFoundError,android,gradle,robolectric,travis-ci,Android,Gradle,Robolectric,Travis Ci,当使用Travis CI使用Robolectric和Gradle测试Android应用程序时,我总是遇到NoClassDefFoundError 所有测试都在Android Studio中通过。所以我想这是Travis特有的配置问题。有没有与Gradle和Travis一起进行机器人分子测试的经验 我有以下消息。travis.yml: language: android android: components: - platform-tools - tools - build-to

当使用Travis CI使用Robolectric和Gradle测试Android应用程序时,我总是遇到
NoClassDefFoundError

所有测试都在Android Studio中通过。所以我想这是Travis特有的配置问题。有没有与Gradle和Travis一起进行机器人分子测试的经验

我有以下消息。travis.yml:

language: android
android:
  components:
  - platform-tools
  - tools
  - build-tools-21.1.2
  - android-21
  - extra-android-m2repository

licenses:
  - android-sdk-license-.+

notifications:
  email: false

script: ./gradlew clean test
以及以下特定于机器人分子的build.gradle:

apply plugin: 'robolectric'

robolectric {
    include '**/*Test.class'
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'

    androidTestCompile 'junit:junit:4.8.1'
    androidTestCompile 'org.robolectric:robolectric:3.0-SNAPSHOT'
    androidTestCompile 'com.squareup.assertj:assertj-android:1.0.0'
}
这是我的GitHub回购:

这是特拉维斯日志:

看来Android依赖性无法解决

有什么想法吗

更新1:

使用--debug标志,日志将发现找不到的类:

15:45:33.082 [DEBUG] [TestEventLogger]         Caused by:
15:45:33.082 [DEBUG] [TestEventLogger]         java.lang.ClassNotFoundException: android.support.v4.view.OnApplyWindowInsetsListener
15:45:33.083 [DEBUG] [TestEventLogger]             at org.robolectric.internal.bytecode.InstrumentingClassLoader.getByteCode(InstrumentingClassLoader.java:166)
15:45:33.083 [DEBUG] [TestEventLogger]             at org.robolectric.internal.bytecode.InstrumentingClassLoader.findClass(InstrumentingClassLoader.java:123)
15:45:33.083 [DEBUG] [TestEventLogger]             at org.robolectric.internal.bytecode.InstrumentingClassLoader.loadClass(InstrumentingClassLoader.java:95)
15:45:33.083 [DEBUG] [TestEventLogger]             at android.support.v7.app.ActionBarActivityDelegate.$$robo$$ActionBarActivityDelegate_7c55_createDelegate(ActionBarActivityDelegate.java:51)
15:45:33.083 [DEBUG] [TestEventLogger]             at android.support.v7.app.ActionBarActivityDelegate.createDelegate(ActionBarActivityDelegate.java)
15:45:33.084 [DEBUG] [TestEventLogger]             at android.support.v7.app.ActionBarActivity.$$robo$$ActionBarActivity_eab0_getDelegate(ActionBarActivity.java:557)
15:45:33.084 [DEBUG] [TestEventLogger]             at android.support.v7.app.ActionBarActivity.getDelegate(ActionBarActivity.java)
15:45:33.084 [DEBUG] [TestEventLogger]             at android.support.v7.app.ActionBarActivity.$$robo$$ActionBarActivity_eab0_onCreate(ActionBarActivity.java:123)
15:45:33.084 [DEBUG] [TestEventLogger]             at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java)
我将在这个方向上进一步研究,也许这是一个已知的机器人分子问题

更新2:

AppCompat v7似乎存在问题


但是,我尝试删除此依赖项,然后检查Travis构建是否通过。

我刚刚检查过。你可以在你的应用程序旁边添加
build.gradle

android {
    ...
    sourceSets {
      androidTest.setRoot( 'src/androidTest' )
    }
}

dependencies {
  compile 'com.android.support:support-v4:21.0.3'
  androidTestCompile 'com.android.support:support-v4:21.0.3'
}

该问题是由AppCompat v7引起的。依赖性似乎是Travis CI的一个已知问题


对于上述用例,删除依赖项解决了问题。

根据建议更新了build.gradle。仍然失败:-(顺便问一句:这不应该是默认的测试根吗?谢谢,到目前为止,进一步的想法?应该是。我检查了你的项目也得到了同样的错误。我添加了关于源代码的行,它在命令行中为gradle工作。除了travis之外,你还有其他失败的环境吗?不,它在我的本地机器上运行得很好(同样来自命令行)但Travis失败。因此,同样的配置在Travis上运行,或者只在命令行上运行?这是当前的构建日志,其中应用了您的建议:……很奇怪,您看到了:-);-)这也是它对我起作用的地方(即使没有设置源集)。特拉维斯需要一些特殊的治疗。到目前为止,非常感谢。您能尝试添加--stacktrace和collect日志,以及--debug和collect日志吗?
android {
    ...
    sourceSets {
      androidTest.setRoot( 'src/androidTest' )
    }
}

dependencies {
  compile 'com.android.support:support-v4:21.0.3'
  androidTestCompile 'com.android.support:support-v4:21.0.3'
}