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
ysetImageResource()
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.