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:

  • Bitmap aus HTML in Android generieren
  • Wie dynamisch setzen Textansicht Höhe Android
  • setzen loadURLTImeOutValue auf Webview
  • Mit actionbar home als up-Taste, home-Aktivität saveInstanceState ist immer null
  • Hintergrund Videoaufnahme in Android 4.0
  • Android: Kannst du einen Ripple-Effekt haben, dessen Standard-Statusfarbe transparent ist?
  • 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; } 

  • Kotlin-Datenklasse von RealmObject
  • Versuchen Sie, das Verhalten von BottomSheet in der Android-Support-Bibliothek zu verstehen. 23.2.1
  • Ist es möglich, das Git-Repository als Abhängigkeit im androiden Grad zu deklarieren?
  • Kotlin Annotationsverarbeitung ignoriert Gegenstände mit ähnlichen Namen
  • Keytool mit Android Facebook SDK
  • Wie kann ich das DATETIME-Format aus der Sqlite-Datenbank abrufen?
  • 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.