最近一段时间,我正在尝试更改一个多模块 Android 应用程序以使用新com.android.dynamic-feature
插件。此更改的一部分是将我的仪器测试移出基本模块并让它们测试多个功能。该com.android.test
插件似乎使我能够做到这一点。
我不得不注意到,从androidTest
源集(使用)构建时运行良好的相同测试在从插件app:assembleDebugAndroidTest
构建(使用)时会导致奇怪的错误。特别是在测试启动Activity时AndroidX AppCompat有问题:com.android.test
app-tests:assemble
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
我创建了这个可以重现问题的最小示例项目(自述文件中的步骤)。
当主题存在实际问题时,我认识到上述错误。但是,主题设置正确,并且在“常规”仪器测试和手动启动应用程序时,活动创建工作正常。应用程序和测试在 API 28 设备上运行。
配置:app-tests
模块时,我按照说明进行操作,最终得到以下配置:
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'
}
我还比较了来自“常规”仪器测试和来自的两个测试 APK,com.android.test
并注意到以下几点:
- 清单看起来几乎相同
com.android.test
APK 包含更多的类,包括大部分/所有:app
依赖项。这似乎是不必要的。
有没有人遇到过这个问题或有解决方案?