2016-06-28 25 views
7

Sto utilizzando alcuni drawable vettoriali nella mia app ma solo per v21 e versioni successive - sono nella cartella delle risorse drawable-anydpi-v21 e hanno anche versioni bitmap di fallback per gli altri livelli API (drawable-hdpi .mdpi, ...).Android Robolectric e vettoriali drawable

Quando eseguo un robolectric con questa configurazione

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

ottengo il seguente errore gonfiare dei punti di vista utilizzando questi drawable

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 

le parti pertinenti del build.gradle sono:

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

Quindi sembra che anche se ho specificato sdk = 16 Robolectric sembra t ake i drawable da drawable-anydpi-v21.

  1. È un errore roboelettrico? oppure

  2. C'è un modo migliore per specificare qual è il livello di APK? oppure

  3. C'è un modo per consentire a roboelectric di leggere il tag vettoriale? oppure

  4. Qualche altro modo di farlo?

+0

Puoi mostrare il tuo 'build.gradle'? Per sapere come utilizzare i drawable vettoriali –

+0

build.gradle aggiunto – siliconeagle

+0

Non funziona in questo modo hai 'defaultConfig { vectorDrawables.useSupportLibrary = true }'? –

risposta

0

Si può fare una cosa. Prendere la fonte di RoboElectric e sostituire tutte le linee

ContextCompat.getDrawable(context, drawableId) 

con

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

Compile roboelectric e utilizzarlo. Permetterà a roboelectric di usare i vettori.

3

Richiede specificamente i test per il target JELLYBEAN?

Dato che non specificamente richiedono i test di indirizzare JELLYBEAN, si consiglia di mettere il V21 + asset nella cartella di res/drawable-v21invece di res/drawable-anydpi-21.

Anche io ho ricevuto di recente lo stesso errore con i test dopo aver aggiunto uno ImageView a un layout che utilizza come origine uno 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" 
    /> 

Utilizzando v3.1 robolectric, sono stato in grado di ottenere il mio test di passare di nuovo con la seguente annotazione config:

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

Spero che questo aiuti.

Problemi correlati