android - online - La bandera Vector Drawables no funciona en la biblioteca de soporte 24+
vector drawable compat android (7)
Hoy en día, parece que Android Nougat fue released . Por lo tanto, estoy más emocionado que nunca de optimizar mi aplicación para las nuevas funciones como pantalla dividida. Me gustaría impulsar una versión de mi aplicación que apunte a la versión 24
SDK para que no se notifique a los usuarios que es posible que mi aplicación no funcione en pantalla dividida. Sin embargo, hacerlo significa que también debo actualizar a la versión 24
de la Biblioteca de soporte. Como muchos otros, experimenté un problema al actualizar a la versión 23.2.0
de la biblioteca de soporte. Sin embargo, seguí esta respuesta y solucioné mi problema. Ahora el problema está volviendo a partir de la versión 24.0.0
y superior de la biblioteca de soporte. En todas mis pruebas, estoy usando la marca de gradle descrita en la respuesta vinculada:
vectorDrawables.useSupportLibrary = true
También es importante tener en cuenta que esto solo está sucediendo en dispositivos pre-Lolliop (Kitkat e inferior). Lollipop y hasta funciona perfectamente. Cuando se usan las siguientes dependencias, la bandera funciona bien:
compile ''com.android.support:support-v4:23.4.0''
compile ''com.android.support:appcompat-v7:23.4.0''
compile ''com.android.support:design:23.4.0''
compile ''com.android.support:cardview-v7:23.4.0''
Pero cuando uso estas dependencias, recibo un bloqueo similar al que obtuve antes de usar la bandera:
compile ''com.android.support:support-v4:24.2.0''
compile ''com.android.support:appcompat-v7:24.2.0''
compile ''com.android.support:design:24.2.0''
compile ''com.android.support:cardview-v7:24.2.0''
Aquí está el rastro de pila de la caída:
FATAL EXCEPTION: main
Process: com.badon.brigham.time, PID: 2070
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.badon.brigham.time/com.badon.brigham.time.MainActivity}: android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f02004f
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f02004f
at android.content.res.Resources.loadDrawable(Resources.java:2101)
at android.content.res.Resources.getDrawable(Resources.java:700)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:346)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:194)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:182)
at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:717)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:187)
at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:77)
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:127)
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:147)
at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:27)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:50)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:181)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:521)
at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71)
...
¿Estoy perdiendo totalmente algo? ¿O es esto ya un problema conocido (no pude encontrar nada en Google)? Cualquier ayuda sería apreciada.
Además de la configuración de Gradle, para mí el truco era agregar esta línea dentro de la actividad onCreate () :
@Override
public void onCreate() {
super.onCreate();
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
Su build.gradle (proyecto) si usa la versión 2.0+, agregue el siguiente código en su build.gradle (app)
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
y, si usa la versión 1.5, agregue a continuación en su build.gradle (aplicación)
// Gradle Plugin 1.5
android {
defaultConfig {
generatedDensities = []
}
// This is handled for you by the 2.0+ Gradle Plugin
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
y, por supuesto, dentro de los archivos de diseño, debe usar el atributo srcCompat :
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_add"/>
En 24.2.0, la biblioteca de soporte de v4 ha sido dividida por google en varios módulos más pequeños:
com.android.support:support-compat:24.2.0
Proporciona envoltorios de compatibilidad para nuevas API de marco, como Context.getDrawable () y View.performAccessibilityAction ().
com.android.support:support-core-utils:24.2.0
Proporciona varias clases de utilidades, como AsyncTaskLoader y PermissionChecker.
com.android.support:support-core-ui:24.2.0
Implementa una variedad de componentes relacionados con la IU, como ViewPager, NestedScrollView y ExploreByTouchHelper.
com.android.support:support-media-compat:24.2.0
Backports partes del marco de medios, incluyendo MediaBrowser y MediaSession.
com.android.support:support-fragment:24.2.0
Backports el marco del fragmento. Este módulo tiene dependencias en compatibilidad con soporte, soporte-núcleo-utiles, soporte-núcleo-ui y soporte-soporte-compatibilidad.
Puedes ver todos los cambios here
Entonces, la respuesta a este problema es recordarles a los mantenedores de Android que han perdido el control y pedirles que reparen sus bibliotecas.
El archivo abc_vector_text.xml
falta en el proyecto en tiempo de ejecución, pero el archivo faltante no se marcará en la compilación si su proyecto no lo está utilizando en primer lugar. El nombre del archivo indica que es solo parte de un conjunto de pruebas.
Estoy usando la siguiente dependencia: compile ''com.android.support:appcompat-v7:25.0.1''
Debido a que esta página indica que el archivo se encuentra en esa biblioteca: https://github.com/dandar3/android-support-v7-appcompat/blob/master/res/drawable/abc_vector_test.xml
.
y sin embargo, todavía veo el error en tiempo de ejecución.
Tenga en cuenta que es un enlace github de un proyecto que no es el proyecto oficial de Android. Parece que no puedo encontrar el archivo en la compilación oficial del proyecto en ninguna parte. Lo que, una vez más, indica que esto es solo un problema de mantenimiento descuidado. Aquí está mi stacktrace para la comparación:
ontent.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f020052
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.os.Looper.loop(Looper.java:137)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.app.ActivityThread.main(ActivityThread.java:5041)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at java.lang.reflect.Method.invokeNative(Native Method)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at java.lang.reflect.Method.invoke(Method.java:511)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at dalvik.system.NativeStart.main(Native Method)
01-02 00:02:23.130 E/AndroidRuntime( 3037): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f020052
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.content.res.Resources.loadDrawable(Resources.java:1953)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.content.res.Resources.getDrawable(Resources.java:660)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:374)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:200)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:188)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:723)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:193)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:81)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:127)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:147)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:27)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:53)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:205)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:525)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:74)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at com.ccc.lib.activity.LoggingAppCompatActivity.onCreate(LoggingAppCompatActivity.java:416)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at com.ccc.lib.debugMode.DebugModeActivity.onCreate(DebugModeActivity.java:95)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at com.ccc.lib.activity.IBusActivity.onCreate(IBusActivity.java:46)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at com.ccc.lib.activity.MainActivity.onCreate(MainActivity.java:173)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.app.Activity.performCreate(Activity.java:5104)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
01-02 00:02:23.130 E/AndroidRuntime( 3037): ... 11 more
01-02 00:02:23.130 E/AndroidRuntime( 3037): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vector
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
01-02 00:02:23.130 E/AndroidRuntime( 3037): at android.content.res.Resources.loadDrawable(Resources.java:1950)
01-02 00:02:23.130 E/AndroidRuntime( 3037): ... 33 more
Tuve el mismo problema con el dexguard. Agregue esta línea en su archivo de configuración:
-keepresourcexmlattributenames vector/*
Ugh ... Odio cuando esto sucede. Haces una pregunta y luego la respondes tú mismo unas horas después. De todos modos, parece que estaba usando una versión de herramientas de compilación desactualizada. Todo lo que tenía que hacer era cambiar una línea en mi gradle:
buildToolsVersion "24.0.1"
para mí era el contenedor de herramientas de compilación anterior en el archivo de build.gradle de la raíz del proyecto
dependencies {
....
classpath ''com.android.tools.build:gradle:2.1.2''
}
en lugar de
classpath ''com.android.tools.build:gradle:1.X.X''
classpath ''com.android.tools.build:gradle:2.1.0''
distributionUrl=https/://services.gradle.org/distributions/gradle-2.10-all.zip