Ich bin mir bewusst, dass es nicht einfach ist, alle Klassen in einem Paket mit Reflektion zu erhalten, aber ich frage mich, ob jemand eine gute Lösung / Abhilfe, speziell für ein Android-Projekt, kennt?
>Gegeben ein Paket, ich muss in der Lage sein, alle Klassen von ihm abzurufen und Annotationen von ihnen durch Reflexion zu verarbeiten.
Kennt jemand einen Weg, dies zu tun? Gibt es Bibliotheken?
Vorhandene Abhängigkeitsinjektionslösungen verwenden Reflektion für die Verarbeitung der Annotationen, benötigen jedoch weiterhin die zu deklarierenden Ressourcen. Siehe dieses Beispiel von DI mit Reflexion .
Wenn Sie Ant zum Erstellen Ihrer Artefakte verwenden, können Sie den Inhalt Ihres Quellverzeichnisses mit Bash oder Java lesen und damit die gesamte Klassenhierarchie bei jedem Build automatisch neu generieren. Dies kann die Arbeit schwierig machen, wenn Sie sich stark auf die Eclipse-IDE verlassen, da die Liste möglicherweise veraltet ist, bis Sie einen weiteren Ant-Build ausführen. (Hinweis: Laut Pyscho können Sie Eclipse verwenden Ant durch Ändern der Projektkonfiguration, siehe Kommentare)
Eine andere Option könnte darin bestehen, die AndroidManifest-Datei mit dem AssetManager zu bearbeiten, aber Sie wären auf die Ressourcen beschränkt, die in dieser Datei deklariert sind. Die kompilierten Klassen selbst sind in der Datei classes.dex integriert und optimiert, und daher werden Sie kaum nützliche Informationen daraus erhalten.
Ich denke, dass Sie die Antwort hier Ссылка finden könnten Es ist eine Java-Datei angehängt, so dass Sie es herunterladen und ausprobieren können
Kurzes Snippet aus der Antwort:
Diese Methode kann nur verwendet werden, wenn:
Sie haben eine Klasse, die sich im selben Paket befindet, das Sie entdecken möchten. Diese Klasse heißt a SeedClass. Wenn Sie beispielsweise alle Klassen in 'java.io' auflisten möchten, kann die Seed-Klasse java.io.File sein.
Ihre Klassen befinden sich in einem Verzeichnis oder in einer JAR-Datei, die Quelldateiinformationen enthält (keine Quellcodedatei, sondern nur Quelldatei). Soweit ich es versucht habe, funktioniert es fast 100% mit Ausnahme der JVM-Klasse (diese Klassen kommen mit der JVM).
Ihr Programm muss berechtigt sein, auf die ProtectionDomain dieser Klassen zuzugreifen. Wenn Ihr Programm lokal geladen wird, sollte es kein Problem geben.
Tags und Links java android reflection