Ich habe gerade eine PreferenceActivity mithilfe des AndroidStudio-Assistenten erstellt. Beim Ausführen dieser Option wurde eine seltsame Ausnahme ausgelöst:
%Vor%ich sah vorgeschlagene Lösungen hier , aber ich fragte mich, warum ich überprüfen müsste, ob meine fragment-klassen sind gültig, da ich nicht einmal vollständig verstehe, was die definition von "gültig" ist, also habe ich mich entschieden, die gemeinschaft zu fragen:
a PreferenceActivity hat isValidFragment(String fragmentName)
Methode, die aus irgendeinem Grund überschrieben werden muss, warum? Wie könnte eine Fragmentklasse nicht gültig sein? und was könnte mit einer solchen Überschreibung schief gehen:
PreferenceActivity hatte seine Sicherheit beeinträchtigt und isValidFragment(String name)
wurde als Antwort bereitgestellt.
Genauer gesagt aus der Offenlegung der Sicherheitslücke:
Jede App, die eine Aktivität implementiert und exportiert das erweitert eine PreferenceActivity-Klasse kann untergeordnet werden, um eine beliebige Klasse zu laden Ausnutzen des dynamischen Fragmentladeprozesses.
Das Sicherheitsproblem bedeutete, dass eine Rogue-Anwendung Ihre PreferenceFragments instanziieren konnte und sie ihre Extrakosten von den tatsächlichen Eltern erhielten, die Daten ausliefern.
Als Patch wurde isValidFragment(String name)
erstellt, so dass Sie gezwungen sind, entweder eine weiße Liste mit "sicheren" Fragmenten bereitzustellen oder, wenn Sie immer "True" zurückgegeben haben, das Risiko einzugehen, dass Ihre Anwendung kompromittiert wird.
Es wird nur benötigt, um KitKat zu starten, wenn der Patch eingeführt wurde.
Einen Namen haben, der Ihrer App fremd ist.
Jemand könnte Ihre App mit der in pdf
Ich denke, es ist eine ganz neue Klasse, die von der alten SDK-Version möglicherweise nicht unterstützt wird.
Wie google-Dokument sagt:
Die Standardimplementierung gibt true für Apps zurück, für die sie erstellt wurden android: targetSdkVersion älter als KITKAT. Für spätere Versionen, es wird eine Ausnahme auslösen.
Aber ich bin mir nicht sicher, ob es auch andere Fälle gibt, die einen Wurf verursachen.
Von developer.android.com:
Unterklassen sollten diese Methode überschreiben und sicherstellen, dass das angegebene Fragment ein gültiger Typ ist, der an diese Aktivität angehängt werden soll. Die Standardimplementierung gibt true für Apps zurück, die für android: targetSdkVersion älter als KITKAT erstellt wurden. Für spätere Versionen wird eine Ausnahme ausgelöst.
Grundsätzlich sollten Sie bei TargetSDK & lt; = KITKAT sicherstellen, dass der Fragmentname isValidFragment
passes korrekt ist.
Tags und Links android android-fragments