如何防止 Android gradle 从 运行 设备测试构建为单元测试

How to prevent Android gradle build from running device tests as unit-tests

我正在将我的 Android 项目 loopback-sdk-android 从 Android Gradle Build Tools 0.9 升级到 1.1。就 IDE 而言,迁移很顺利,我可以在模拟器上编译项目和 运行 设备测试。

但是,命令行构建已损坏。当我 运行 ./gradlew build(或 ./gradlew test)时,构建工具错误地从 src/androidTest/java 中提取文件作为单元测试文件,并且构建失败并出现一堆 NoClassDefFoundError。

com.strongloop.android.loopback.test.AsyncTestCase > initializationError FAILED
    java.lang.NoClassDefFoundError
        Caused by: java.lang.ClassNotFoundException

./gradlew connectedAndroidTest 工作正常,运行 在模拟器上进行来自 src/androidTest/java 的测试。

如何配置 gradle 构建,使其不会 运行 设备测试作为纯单元测试?

解决方案:升级构建文件后删除旧的构建工件。

./gradlew clean

为了后代,这里有一个简短的片段向我确认构建正确地获取了源文件:

android {
    sourceSets {
        logger.info("androidTest java srcdirs");
        androidTest.java.srcDirs.each { d -> logger.info("\t" + d) }

        logger.info("test java srcdirs");
        test.java.srcDirs.each { d -> logger.info("\t" + d) }
    }
}

./gradlew --info test 产生了以下结果:

androidTest java srcdirs
    ~/src/loopback/android/src/androidTest/java
test java srcdirs
    ~/src/loopback/android/src/test/java

打开你的文件build.gradle(模块:app)

在 android 中评论您的测试编译{}

//testInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner"