Abrufen einer Liste von Klassen aus einem Paket in einem Android-Projekt

9

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?

    
Tyler Treat 13.02.2012, 05:13
quelle

3 Antworten

0

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.

    
seanhodges 15.02.2012, 09:45
quelle
3

Das Scannen des Dateisystems, wie es die meisten Lösungen für Nicht-Android-Java tun, wird auf Android nicht helfen. Hier ist eine (theoretische) Lösung, die Android-spezifisch ist: Ссылка

Allerdings bleibt es ein Hack, da Java dies leider nicht direkt unterstützt.

    
Bachi 05.01.2013 12:28
quelle
0

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.

    
Andrei G 15.02.2012 09:54
quelle

Tags und Links