Nach dem Kompilieren Entfernen von Anmerkungen aus dem Byte-Code

8

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.

    
Jeffrey Blattman 18.06.2012, 23:40
quelle

4 Antworten

2

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%     
John Watts 19.06.2012, 03:02
quelle
1

ProGuard wird dies zusätzlich zur Verschleierung Ihres Codes tun.

    
Nikolay Elenkov 19.06.2012 04:19
quelle
1

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.

    
Peter Fichtner 18.08.2012 14:56
quelle
0

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%     
Mikalai Parafeniuk 16.02.2017 09:23
quelle