使用“ com.android.test”插件构建工具测试后出现错误

时间:2019-02-27 23:03:31

标签: android-espresso android-testing androidx android-module

在最近的一段时间里,我试图更改一个多模块Android应用程序以使用新的com.android.dynamic-feature插件。这项更改的一部分是将我的仪器测试移出了基本模块,并让他们测试了多个功能。 com.android.test plugin似乎使我能够做到这一点。

我必须注意到,从androidTest源码集构建(使用app:assembleDebugAndroidTest时,运行相同的测试会很好,而从com.android.test插件构建(使用app-tests:assemble)。特别是,当测试启动Activity时,AndroidX AppCompat会出现问题:

Caused by: java.lang.IllegalStateException: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat.
    at androidx.appcompat.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:756)
    at androidx.appcompat.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:196)
    at androidx.appcompat.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:86)
    at androidx.appcompat.app.AppCompatDelegateImpl.<init>(AppCompatDelegateImpl.java:260)
    at androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:182)
    at androidx.appcompat.app.AppCompatActivity.getDelegate(AppCompatActivity.java:520)
    at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:71)
    at biz.laenger.android.foo.app.presentation.main.MainActivity.onCreate(MainActivity.kt:28)
    at android.app.Activity.performCreate(Activity.java:7009)
    at android.app.Activity.performCreate(Activity.java:7000)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
    at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:674)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
    ... 9 more

我创建了这个minimal sample项目,可以在其中复制问题(自述文件中的步骤)。

从主题出现实际问题时,我发现上述错误。但是,正确设置了主题,并且在“常规”测试测试和手动启动应用程序时可以很好地进行“活动创建”。该应用和测试在API 28设备上运行。

在配置:app-tests模块时,我按照说明进行操作,最后得到了这个config

apply plugin: 'com.android.test'

android {
    compileSdkVersion rootProject.compileSdkVersion
    buildToolsVersion rootProject.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion

        testApplicationId 'biz.laenger.android.foo.app.test'
        testInstrumentationRunner 'biz.laenger.android.foo.app.FooTestApplicationRunner'
    }

    targetProjectPath ':app'
}

我还比较了“常规”仪器测试和com.android.test的两个测试APK,并注意到以下几点:

  • 清单看起来几乎完全相同
  • com.android.test APK包含更多类,包括大多数/全部:app依赖项。这似乎不必要。

有人遇到这个问题或有解决方案吗?

0 个答案:

没有答案