web-dev-qa-db-de.com

Das Vector Drawables Flag funktioniert nicht in der Support Library 24+

Heute scheint es, als wäre Android Nougat veröffentlicht . Daher bin ich mehr denn je aufgeregt, meine App für die neuen Funktionen wie Split-Screen zu optimieren Ich möchte eine Version meiner App, die auf die SDK-Version 24 abzielt, pushen, damit Benutzer nicht benachrichtigt werden, dass meine App möglicherweise nicht im geteilten Bildschirm funktioniert. Dies bedeutet jedoch, dass ich auch auf die Version 24 der Support-Bibliothek aktualisieren sollte Bei vielen anderen ist ein Problem beim Aktualisieren auf die Version 23.2.0 der Support-Bibliothek aufgetreten. Ich habe jedoch diese Antwort befolgt und das Problem behoben. Jetzt kehrt das Problem ab der Version 24.0.0 und höher des Supports zurück Bibliothek: In all meinen Tests verwende ich die in der verknüpften Antwort beschriebene Gradle-Flagge:

vectorDrawables.useSupportLibrary = true

Es ist auch wichtig zu beachten, dass dies nur bei Geräten vor Lolliop (KitKat und niedriger) der Fall ist. Lollipop und Up funktioniert perfekt. Bei Verwendung der folgenden Abhängigkeiten funktioniert das Flag einwandfrei:

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'

Bei Verwendung dieser Abhängigkeiten kommt es jedoch zu einem Absturz, der dem ähnelt, den ich vor der Verwendung des Flags hatte:

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'

Hier ist der Stack-Trace des Absturzes:

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

Vermisse ich total etwas? Oder ist dies bereits ein bekanntes Problem (bei Google konnte ich nichts finden)? Jede Hilfe wäre dankbar.

23
Brigham B.

Ugh ... ich hasse es, wenn das passiert. Sie stellen eine Frage und beantworten sie einige Stunden später selbst. Wie auch immer, es sieht so aus, als würde ich eine veraltete Version der Build-Tools verwenden. Alles was ich tun musste, war eine Zeile in meiner Klasse zu ändern:

buildToolsVersion "24.0.1"
30
Brigham B.

Zusätzlich zur Gradle-Konfiguration bestand der Trick für mich darin, diese Zeile in die Aktivität onCreate () einzufügen:

@Override
public void onCreate() {
    super.onCreate();
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

Ihr build.gradle (Projekt) Wenn Sie Version 2.0+ verwenden, fügen Sie den folgenden Code in Ihr build.gradle (App)

// Gradle Plugin 2.0+  
 Android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }

und, wenn Sie Version 1.5 verwenden, fügen Sie unten in Ihrer build.gradle (App) hinzu

// Gradle Plugin 1.5  
 Android {  
   defaultConfig {  
     generatedDensities = []  
  }  

  // This is handled for you by the 2.0+ Gradle Plugin  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 }

und natürlich sollten Sie in den Layout-Dateien das Attribut srcCompat verwenden:

<ImageView  
  Android:layout_width="wrap_content"  
  Android:layout_height="wrap_content"  
  app:srcCompat="@drawable/ic_add"/>
11
Mr.Moustard

In 24.2.0 wurde die v4 Support Library von Google in mehrere kleinere Module aufgeteilt:

com.Android.support:support-compat:24.2.0

Stellt Kompatibilitätswrapper für neue Framework-APIs bereit, z. B. Context.getDrawable () und View.performAccessibilityAction ().

com.Android.support:support-core-utils:24.2.0

Stellt eine Reihe von Dienstprogrammklassen bereit, z. B. AsyncTaskLoader und PermissionChecker.

com.Android.support:support-core-ui:24.2.0

Implementiert eine Vielzahl von UI-bezogenen Komponenten wie ViewPager, NestedScrollView und ExploreByTouchHelper.

com.Android.support:support-media-compat:24.2.0

Portiert Teile des Medien-Frameworks, einschließlich MediaBrowser und MediaSession, zurück.

com.Android.support:support-fragment:24.2.0

Exportiert das Fragment-Framework zurück. Dieses Modul hat Abhängigkeiten von support-compat, support-core-utils, support-core-ui und support-media-compat.

Sie können alle Änderungen sehen hier

3
Duda

Ich hatte das gleiche Problem mit Dexguard. Fügen Sie diese Zeile in Ihre Konfigurationsdatei ein:

-keepresourcexmlattributenames vector/*
1
ialfa1987

für mich war es der alte Wrapper für Build-Tools in der Datei build.gradle des Projektstamms

dependencies {
    ....
    classpath 'com.Android.tools.build:gradle:2.1.2'
}

anstatt von

classpath 'com.Android.tools.build:gradle:1.X.X'
0
zaPlayer