Warum sollte eine Fragmentklasse nicht gültig sein?

Ich habe gerade eine PreferenceActivity mit dem AndroidStudio-Assistenten erstellt und damit eine komische Ausnahme geworfen:

java.lang.RuntimeException: Subclasses of PreferenceActivity must override isValidFragment(String) to verify that the Fragment class is valid! 

Ich habe hier vorgeschlagene Lösungen gefunden, aber ich habe mich gefragt, warum sollte ich überprüfen, ob meine Fragmentklassen gültig sind, da ich nicht einmal ganz verstehe was ist die Definition von "gültig", also habe ich beschlossen, die Community zu fragen:

Eine PreferenceActivity hat isValidFragment(String fragmentName) Methode, die aus irgendeinem Grund überschritten werden muss, warum? Wie könnte eine Fragmentklasse nicht gültig sein? Und was könnte mit einer solchen Überschreibung schief gehen:

  @Override protected boolean isValidFragment(String fragmentName) { return true; } 

  • Java.lang.IllegalStateException: Diese Aktion kann nach onSaveInstanceState nicht ausgeführt werden: - Fehler in Fragment
  • Wie man zwischen Fragmenten beim Onclick umschaltet?
  • Bring Fragment nach vorne (keine Fragment Erholung)
  • Android Date Time Picker in einem Dialog
  • Populäre ListFragments mit einer benutzerdefinierten Ansicht?
  • Recycler-Ansicht nicht anzeigen
  • Dilemma: wann man Fragments vs nutzt Aktivitäten:
  • Überprüfen, ob der Zustand gespeichert ist, bevor eine FragmentTransaction begangen wird
  • 3 Solutions collect form web for “Warum sollte eine Fragmentklasse nicht gültig sein?”

    Warum?

    PreferenceActivity wurde seine Sicherheit kompromittiert und isValidFragment(String name) wurde als Antwort bereitgestellt.

    Genauer gesagt, aus der Vulnerability-Offenbarung:

    Jede App, die eine Aktivität implementiert und exportiert, die eine PreferenceActivity-Klasse erweitert, kann unterbrochen werden, um eine beliebige Klasse zu laden, indem sie den dynamischen Fragment-Ladevorgang ausnutzt.

    Das Sicherheitsproblem bedeutete, dass eine Schurkenanwendung Ihre PräferenzFragments instanziieren könnte und sie würden ihre Extras von den tatsächlichen Elternteilen und Leckdaten erhalten.

    Als Patch wurde isValidFragment(String name) erstellt, so dass Sie gezwungen sind, entweder eine Whitelist von "sicheren" Fragmenten zur Verfügung zu stellen, oder wenn Sie immer wahr sind, bestätigen Sie das Risiko, dass Ihre Anwendung kompromittiert wird.

    Es ist nur nötig, KitKat zu starten, denn wenn der Patch eingeführt wurde.

    Wie könnte eine Fragmentklasse nicht gültig sein?

    Einen Namen fremd zu deiner App haben.

    Was könnte schiefgehen?

    Jemand könnte deine App durch die in diesem pdf verknüpfte Methode, die von @Sree in den Kommentaren verknüpft ist, angreifen.

    Ich denke, es ist eine ganz neue Klasse, die nicht von der alten Sdk-Version unterstützt werden kann.

    Wie Google Dokument sagt:

    Die Standardimplementierung erfolgt für Apps, die für Android erstellt wurden: targetSdkVersion älter als KITKAT. Für spätere Versionen wird es eine Ausnahme auslösen.

    Aber ich bin mir nicht ganz sicher, ob irgendwelche anderen Fälle auch zum Wurf führen.

    Von developer.android.com:

    Unterklassen sollten diese Methode überschreiben und überprüfen, ob das angegebene Fragment ein gültiger Typ ist, der an diese Aktivität angehängt werden soll. Die Standardimplementierung erfolgt für Apps, die für Android erstellt wurden: targetSdkVersion älter als KITKAT. Für spätere Versionen wird es eine Ausnahme auslösen.

    Grundsätzlich auf TargetSDK <= KITKAT, sollten Sie sicherstellen, dass der Fragmentname isValidFragment Pässe korrekt ist.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.