Wir verwenden eine Bibliothek, die Beans enthält, die mit JAXB-Annotationen versehen sind. nichts in der Art, wie wir diese Klassen verwenden, hängt von JAXB ab. Mit anderen Worten, wir brauchen JAXB nicht und sind nicht von den Anmerkungen abhängig.
Da die Anmerkungen jedoch vorhanden sind, werden sie von anderen Klassen referenziert, die Annotationen verarbeiten. Dies erfordert, dass ich JAXB in unserer Anwendung bündle, was nicht erlaubt ist, weil JAXB im javax.*
-Paket ist (Android erlaubt nicht, dass "Kernbibliotheken" in Ihrer Anwendung enthalten sind).
In diesem Sinne suche ich nach einer Möglichkeit, die Annotationen aus dem kompilierten Byte-Code zu entfernen. Ich weiß, es gibt Dienstprogramme für die Manipulation von Byte-Code, aber das ist ziemlich neu für mich. jede Hilfe, die zu diesem Zweck begonnen wird, würde geschätzt werden.
Ich empfehle BCEL 6. Sie können auch ASM verwenden, aber ich höre, dass BCEL einfacher zu verwenden ist. Hier ist eine schnelle Testmethode, um ein Feld final zu machen:
%Vor%Natürlich würden Sie Ihre Klassen tatsächlich als Dateien auf die Festplatte schreiben und sie dann einkrempeln, aber das ist einfacher für das Ausprobieren. Ich habe BCEL 6 nicht griffbereit, daher kann ich dieses Beispiel nicht ändern, um Anmerkungen zu entfernen, aber ich stelle mir vor, dass der Code etwa wie folgt aussehen würde:
%Vor%ProGuard wird dies zusätzlich zur Verschleierung Ihres Codes tun.
Es gibt eine zusätzliche AntApp- Aufgabe "Annotierungsreferenzen bereinigen" , die
Verweise auf Annotationen aus den Java-Bytecode / classfiles (Entfernen Sie das @ Annotag von annotierten Elementen). Jetzt können Sie verwenden Anmerkungen zur Überprüfung von Konstellationen im Bytecode nach dem Übersetzen aber Entfernen Sie die verwendeten Annos, bevor Sie die Gläser loslassen.
Ich habe die ByteBuddy -Bibliothek verwendet, um Anmerkungen zu entfernen. Leider konnte ich Annotationen mit High-Level-API nicht entfernen, daher verwendete ich ASM api. Hier ist ein Beispiel, wie Sie @Deprecated Annotation aus dem Feld einer Klasse entfernen können:
%Vor%Tags und Links java android annotations javassist bcel