Android Robolectric и векторные чертежи

Я использую некоторые векторные чертежи в своем приложении, но только для v21 и выше – они находятся в папке ресурсов drawable-anydpi-v21, а также имеют резервные растровые версии для других уровней api (drawable-hdpi.mdpi, …).

Когда я запускаю robolectric с этой конфигурацией

@Config(sdk = 16, application = MyApp.class, constants = BuildConfig.class, packageName = "com.company.app") 

Я получаю следующую ошибку при раздутии просмотров с помощью этих чертежей

 Caused by: android.content.res.Resources$NotFoundException: File ./app/build/intermediates/data-binding-layout-out/dev/debug/drawable-anydpi-v21/ic_info_outline_white_24dp.xml from drawable resource ID #0x7f02010e Caused by: org.xmlpull.v1.XmlPullParserException: XML file ./app/build/intermediates/data-binding-layout-out/dev/debug/drawable-anydpi-v21/ic_info_outline_white_24dp.xml line #-1 (sorry, not yet implemented): invalid drawable tag vector 

Соответствующими частями build.gradle являются:

  android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "com.example.app" minSdkVersion 16 targetSdkVersion 23 versionCode 79 versionName "0.39" // Enabling multidex support. multiDexEnabled true vectorDrawables.useSupportLibrary = true testApplicationId "com.example.app.test" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } testOptions { unitTests.returnDefaultValues = true } } dependencies { compile 'com.android.support:support-vector-drawable:23.4.0' testCompile "org.robolectric:robolectric:3.1" testCompile "org.robolectric:shadows-multidex:3.1" testCompile "org.robolectric:shadows-support-v4:3.1" } 

Таким образом, похоже, что, хотя я указал sdk = 16, Robolectric, похоже, извлекает чертежи из drawable-anydpi-v21.

  1. Является ли это ошибкой roboelectric? или

  2. Есть ли лучший способ указать, что такое уровень APK? или

  3. Есть ли способ, чтобы roboelectric читал векторный тег? или

  4. Какой-то другой способ сделать это?

Вы специально требуете, чтобы ваши тесты нацелились на JELLYBEAN ?

Если вы специально требуете, чтобы ваши тесты нацелились на JELLYBEAN , вы можете поместить свои ресурсы v21 + в папку res/drawable-anydpi-21 res/drawable-v21 вместо res/drawable-anydpi-21 .

Я тоже недавно получал ту же ошибку с тестами после добавления ImageView в макет, который использует VectorDrawable качестве источника.

 <ImageView android:contentDescription="@string/content_image_description" android:src="@drawable/banner" android:layout_gravity="right" android:layout_width="@dimen/banner_width" android:layout_height="@dimen/banner_height" /> 

Используя robolectric v3.1, мне удалось снова пройти мои тесты с помощью следующей аннотации конфигурации:

 @Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP, packageName = "com.package") 

Надеюсь это поможет.

Вы можете сделать одно. Возьмите источник RoboElectric и замените все линии

 ContextCompat.getDrawable(context, drawableId) 

с

 AppCompatDrawableManager.get().getDrawable(context, drawableId) 

Скомпилируйте roboelectric и используйте его. Это позволит использовать roboelectric векторы.