Android Robolectric和矢量绘图

我在我的应用程序中使用了一些矢量绘图,但仅适用于v21及更高版本 - 它们位于资源文件夹drawable-anydpi-v21中,并且还具有用于其他api级别的drawback位图版本(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中获取了drawable。

  • 这是一个缺陷是螺旋电? 要么

  • 有没有更好的方式来指定APK级别是什么? 要么

  • 有没有办法让轮船读取矢量标签? 要么

  • 还有其他的方式吗?


  • 您是否特别要求您的测试以JELLYBEAN为目标?

    鉴于您确实需要进行测试来定位JELLYBEAN ,因此您可能希望将您的v21 +资产置于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)
    

    编译和使用它。 它将允许轮船使用载体。

    链接地址: http://www.djcxy.com/p/34971.html

    上一篇: Android Robolectric and vector drawables

    下一篇: How to simulate a CRM plugin sandbox isolation mode in unit tests?