Es gibt eine nicht öffentliche API, die ich außer Kraft setzen muss, um mit dem WebView von Android eine Kleinigkeit zu umgehen.
Die API ist versteckt, aber es ist öffentlich:
%Vor%So kann ich es überschreiben, indem ich es einfach in meiner eigenen WebView-Klasse deklariere, abzüglich des @Override:
%Vor%Ist es möglich, die Super-Methode aus meiner Überschreibung heraus aufzurufen? Normalerweise könnte ich schreiben:
%Vor% Aber die Methode ist versteckt, daher ist super.selectText()
nicht verfügbar. Wenn ich Reflexion verwende:
Ich bekomme eine Endlosschleife, weil sie meine überschriebene Methode aufruft.
Gibt es trotzdem eine Möglichkeit diese Methode zu überschreiben UND die super Methode aufzurufen?
Danke!
Gibt es sowieso, diese Methode zu überschreiben UND den Super zu rufen Methode?
Nein, leider, wie in der Antwort auf die Frage So rufen Sie eine Superklassenmethode mit der Java-Reflektion auf können Sie dieses Problem nicht durch Reflektion lösen.
Es gibt tatsächlich ein paar Möglichkeiten, dies zu tun, aber sie sind ein wenig arbeitsintensiv, also sollte wahrscheinlich als letzter Ausweg verwendet werden. Mit einem gerooteten Gerät können Sie die Symbole aus den Framework-Dateien auf dem Gerät extrahieren und in die android.jar-Datei in Ihrem sdk / platforms / -Ordner kopieren. Hatte ein Skript, um dies zu tun; verlor es in wechselnden Jobs.
Schritte aus dem Speicher (beachten Sie, dass Sie wahrscheinlich Probleme haben werden, da ich mich nicht an die Schritte erinnere ... für fortgeschrittene Benutzer, die verstehen, woran ich versuche zu kommen):
Ich schlage vor, Ihren android- # sdk # -Ordner in einen android-1 # sdk # -Ordner zu kopieren, so dass android-19 android-119 wird und dann build.prop im Ordner ro.build.version.sdk ändert = 119, und baue dann gegen sdk 119 auf. Auf diese Weise hast du die Wahl, gegen eine saubere 119 oder deine gehackte 119 zu bauen. Beziehe dich einfach nicht auf irgendwelche com.android.internal.R Dateien, weil diese IDs nicht genau in meinen sind Erfahrung.
Sie können nun gegen diese Symbole kompilieren und auf sie zugreifen. Seien Sie jedoch nicht sauer, wenn sie die Funktionsweise der Dinge ändern, und sie sind nicht verpflichtet, die Kompatibilität mit Apps von Drittanbietern aufrechtzuerhalten.
Dies funktioniert, weil das hide-Tag nur während des SDK-Kompilierungsschritts verwendet wird und diese Symbole von der android.jar in Ihrem sdk entfernt. Wenn wir alle Symbole sammeln, die auf dem Gerät kompiliert sind, und sie in dein SDK-Krug stecken, ist es so, als ob sie nie entfernt worden wären.
Alternativ könntest du den kompletten Android-Baum runterziehen ( Ссылка ) und dann deine App gegen die erstellen volle Quelle, die der erste Schritt im Wesentlichen ist, indem sie bereits kompilierte Symbole übernimmt und mit ihnen arbeitet.
Lösung 1) - was Sie hier am besten tun können, was Sie erreichen möchten
%Vor%Lösungen 2)
gehört das Objekt (das diese Methode aufruft) zu Ihnen? und implementiert Schnittstelle?
Wenn ja, wie wäre es mit Proxy?
Tags und Links java android reflection override