Hauptziel ist es, die Android-Systemklasse (Activity, View usw.) mit meiner eigenen Implementierung zu überschreiben.
ClassLoader zum Laden benutzerdefinierter Klassen ist implementiert, das Laden von Nicht-Systemklassen (benutzerdefinierte Klassen) funktioniert.
Aber wenn ich versuche, die Aktivität mit meiner Implementierung zu laden, wird sie nicht geladen, weil ClassLoader diese Klasse bereits in ihrem Cache hat:
%Vor%Wie kann ich den Klassenlader ändern, um meine eigene Klasse anstelle des Systems zu injizieren?
Ich habe diese Lösung aus einem Blogpost gefunden. Ich weiß, es ist eher gegen Stack-Überlauf-Richtlinien, um einen Link zu posten, aber der Text ist zu groß, um übertragen zu werden.
Die Idee besteht darin, einen C-Code zu schreiben, der den Mechanismus zum Laden niedriger Klassen außer Kraft setzt und somit die Art, wie eine Methode ausgeführt wird, überschreibt. Ich hoffe, das könnte jemandem helfen.
Sobald eine Klasse von RootClassLoader geladen wurde, kann sie nicht erneut geladen werden, es sei denn, sie wird zuerst entladen. Das Entladen einer Klasse ist jedoch ein Prozess, der automatisch vom DVM verwaltet wird. Ich bin auch von dem gleichen Problem betroffen.
Tags und Links java android reflection classloader dynamic-class-loaders