support srccompat enable drawables android android-support-library android-appcompat android-vectordrawable

srccompat - Android vectorDrawables.useSupportLibrary=true está deteniendo la aplicación



vector drawable gradle (3)

No puede usar Vector Drawables en ninguna otra vista excepto ImageView en pre-lollipop.

Por favor vea esta respuesta de SO por el promotor de desarrolladores de google.

Para los usuarios de AppCompat, hemos decidido eliminar la funcionalidad que le permite usar vectores dibujables de recursos en dispositivos pre-Lollipop debido a problemas encontrados en la implementación en la versión 23.2.0 / 23.2.1 [ https://code.google.com/p/android/issues/detail?id=205236 , https://code.google.com/p/android/issues/detail?id=204708 ]. El uso de la app:srcCompat y setImageResource() sigue funcionando.

Si desea utilizar el pre-lollipop Vector Drawables , puede configurarlo programáticamente convirtiéndolo en un drawable.

Drawable drawable; if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.M) { drawable = context.getResources().getDrawable(drawableResId, context.getTheme()); } else { drawable = VectorDrawableCompat.create(context.getResources(), drawableResId, context.getTheme()); } button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);

Si uso vectorDrawables.useSupportLibrary = true en gradle, a continuación, ejecute la aplicación que se detuvo por desgracia. Si elimino vectorDrawables.useSupportLibrary = true, la aplicación funciona.

Mi gradle

apply plugin: ''com.android.application'' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { vectorDrawables.useSupportLibrary = true applicationId "com.helikanon.firstapp" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } } dependencies { compile fileTree(include: [''*.jar''], dir: ''libs'') androidTestCompile(''com.android.support.test.espresso:espresso-core:2.2.2'', { exclude group: ''com.android.support'', module: ''support-annotations'' }) compile ''com.android.support:appcompat-v7:25.1.0'' compile ''com.android.support:design:25.1.0'' compile ''com.jakewharton:butterknife:8.4.0'' compile ''com.android.support:support-v4:25.1.0'' testCompile ''junit:junit:4.12'' annotationProcessor ''com.jakewharton:butterknife-compiler:8.4.0'' compile ''uk.co.chrisjenx:calligraphy:2.2.0'' compile ''com.google.android.gms:play-services-ads:10.0.1'' }

Los errores :

E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.helikanon.firstapp/com.helikanon.firstapp.activities.MainActivity}: android.view.InflateException: Binary XML file line #62: Error inflating class Button at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) at android.app.ActivityThread.access$600(ActivityThread.java:130) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #62: Error inflating class Button at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) . . .

La aplicación se bloquea cuando uso Api 16 y Api 19, pero cuando uso Api 23 funciona.


Para usar VectorDrawableCompat, debe configurar android.defaultConfig.vectorDrawables.useSupportLibrary = true.

Para usar VectorDrawableCompat, necesita hacer dos modificaciones a su proyecto. Primero, configure android.defaultConfig.vectorDrawables.useSupportLibrary = true en su archivo build.gradle, y segundo, use app: srcCompat en lugar de android: src para referirse a los dibujos vectoriales.

1) Vaya a su build.gradle (Módulo: aplicación) y agregue la siguiente línea al bloque de Android. Debería verse así.

android { compileSdkVersion 27 defaultConfig { applicationId "..." minSdkVersion 15 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ------> android.defaultConfig.vectorDrawables.useSupportLibrary = true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android-optimize.txt''), ''proguard-rules.pro'' } } }

2) Consulte la fuente como srcCompat para permitir que su aplicación utilice gráficos vectoriales.

app: srcCompat = "@ drawable / plane"


Yo estaba en uno de los proyectos de práctica tratando de aprender tareas de fondo y servicios en Android. Cuando saqué su código de muestra, inicialmente no se estaba compilando debido a this error. Así que agregué la etiqueta a continuación en el archivo build.gradle de la aplicación para deshacerme del problema de compilación:

android { defaultConfig{ vectorDrawables.useSupportLibrary = true } }

Ahora, en el momento en que agregué esta configuración, mi aplicación también comenzó a fallar en el Simulador de Android de Microsoft exactamente como lo describió OP.

Debido a que mi enfoque actual era aprender sobre tareas en segundo plano, quería comenzar a depurar mi aplicación. Por lo tanto, quité la configuración de configuración anterior de nuevo. Además, también android:fillColor un atributo llamado android:fillColor en la etiqueta de path de uno de mis recursos dibujables (o también puede reemplazar el valor @color/colorAccent con un código hexadecimal como #FF000000 ). Después de eliminarlo (o cambiarlo con un código hexadecimal), mi error de compilación inicial no llegó:

<?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="80dp" android:height="80dp" android:viewportWidth="24" android:viewportHeight="24"> <path android:fillColor="@color/colorAccent" android:pathData="M16.01 7L16 3h-2v4h-4V3H8v4h-0.01C7 6.99 6 7.99 6 8.99v5.49L9.5 18v3h5v-3l3.5-3.51v-5.5c0-1-1-2-1.99-1.99z" /> <path android:pathData="M0 0h24v24H0z" /> </vector>

Después de la eliminación se ve como:

<?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="80dp" android:height="80dp" android:viewportWidth="24" android:viewportHeight="24"> <path android:pathData="M16.01 7L16 3h-2v4h-4V3H8v4h-0.01C7 6.99 6 7.99 6 8.99v5.49L9.5 18v3h5v-3l3.5-3.51v-5.5c0-1-1-2-1.99-1.99z" /> <path android:pathData="M0 0h24v24H0z" /> </vector>

Mi emulador de MS para Android tenía Kitkat (4.4). Mi código estaba fallando porque mi aplicación estaba tratando de usar dibujos vectoriales en una versión de Android previa a la paleta como se menciona en la respuesta aceptada de Vipul.