2016-06-28 22 views
7

Ich benutze einige Vektor Drawables in meiner App, aber nur für V21 und höher - sie sind in der Ressource Ordner Drawable-anydpi-v21 und auch Fallback-Bitmap-Versionen für die anderen API-Ebenen (Drawable-hdpi .mdpi, ...).Android Robolectric und Vektor Drawables

Wenn ich einen robolectric mit dieser Konfiguration laufen

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

ich folgende Fehlermeldung erhalten, auf aufblasen der Ansichten diese Drawables mit

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 

die relevanten Teile des build.gradle sind:

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" 
    } 

So sieht es aus, obwohl ich angegeben habe, sdk = 16 Robolectric scheint zu t ake die Drawables von Drawable-anydpi-v21.

  1. Ist das ein Fehler ist Roboelectric? oder

  2. Gibt es eine bessere Möglichkeit, anzugeben, was die APK-Ebene ist? oder

  3. Gibt es eine Möglichkeit, lassen Sie Roboelec der Vektor-Tag lesen? oder

  4. Eine andere Möglichkeit, es zu tun?

+0

Können Sie Ihre 'build.gradle' zeigen? Um sicher zu stellen, wie Sie Vektor-Zeichensatz verwenden –

+0

build.gradle hinzugefügt – siliconeagle

+0

Es funktioniert nicht so haben Sie 'defaultConfig { vectorDrawables.useSupportLibrary = true }'? –

Antwort

0

Sie können eine Sache tun. Nehmen Sie die Quelle von RoboElectric und ersetzen Sie alle Linien

ContextCompat.getDrawable(context, drawableId) 

mit

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

Compile roboelectric und verwenden. Es erlaubt Roboelectric, Vektoren zu verwenden.

3

Benötigen Sie speziell Ihre Tests zum Ziel JELLYBEAN?

Angenommen, Sie speziell Sie Ihre Tests erfordern GELEEBONBON Ziel, möchten Sie vielleicht Ihre v21 + Assets im res/drawable-v21 Ordner statt von res/drawable-anydpi-21 setzen.

Ich auch vor kurzem bekam den gleichen Fehler mit Tests nach dem Hinzufügen eines ImageView zu einem Layout, das eine VectorDrawable als Quelle verwendet.

<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" 
    /> 

Mit robolectric v3.1 konnte ich meine Tests bekommen wieder Annotation mit der folgenden Konfiguration weitergeben müssen:

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

Hoffnung, das hilft.