2016-06-28 12 views
7

Używam niektórych wektorów w mojej aplikacji, ale tylko dla v21 i wyżej - są w folderze zasobów drawable-anydpi-v21, a także mają wersje map bitowych zastępcze dla innych poziomów api (drawable-hdpi .mdpi, ...).Android Robilesmake i wektorowe rysunki

Kiedy uruchomić robolectric z tym config

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

otrzymuję następujący błąd na nadmuchać poglądów za pomocą tych kanału alfa

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 

odpowiednich częściach build.gradle są:

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

Wygląda na to, że chociaż mam określony sdk = 16 Robolectric wydaje się, że łączyć rysunki z drawable-anydpi-v21.

  1. Czy to błąd roboelektryka? lub

  2. Czy istnieje lepszy sposób określenia poziomu pakietu APK? lub

  3. Czy istnieje sposób, aby roboelektryk odczytał znacznik wektorowy? lub

  4. Jakiś inny sposób robienia tego?

+0

Czy możesz pokazać swój 'build.gradle'? Aby upewnić się, jak używać rysunków wektorowych, dodano –

+0

build.gradle dodano – siliconeagle

+0

To nie działa w ten sposób. Czy masz 'defaultConfig { vectorDrawables.useSupportLibrary = true }'? –

Odpowiedz

0

Możesz zrobić jedną rzecz. Weź źródło RoboElectric i zastąpić wszystkie linie

ContextCompat.getDrawable(context, drawableId) 

z

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

kompilacji roboelectric i używać go. Umożliwi to roboelektrycznym używanie wektorów.

3

Czy konkretnie chcesz, aby Twoje testy były skierowane na JELLYBEAN?

Biorąc robisz specjalnie wymagać od swoich testów kierować Jellybean, może chcesz umieścić V21 + aktywa w folderze res/drawable-v21zamiast z res/drawable-anydpi-21.

Również ja ostatnio miałem ten sam błąd w testach po dodaniu ImageView do układu, który używa VectorDrawable jako źródła.

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

Korzystanie robolectric v3.1, udało mi się dostać moje testy zdać ponownie z poniższej adnotacji config:

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

nadzieję, że to pomaga.

Powiązane problemy