【问题标题】:how to keep class file "package-info.class" generated by JAXB during proguard obfuscation step如何在 proguard 混淆步骤期间保留由 JAXB 生成的类文件“package-info.class”
【发布时间】:2011-05-04 13:38:22
【问题描述】:

我有一个问题,我有一些 JAXB 生成的 java 文件,它们之间有众所周知的“package-info.java”,它只包含 2 行代码、一个注释和一个包定义:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://it.tms.project/input")
package it.tms.project.jaxb.input;

现在,当编译此文件时,会生成一个普通的 .class 文件,但是当我尝试对其进行混淆时,proguard 不会将其添加到混淆的 output.jar 中,我想这是因为它不包含任何类或其他内容,并且没有其他java文件引用它。 我尝试了一些 proguard 选项来解决这个问题,但没有一个是好的:

-keepparameternames
-keepattributes Exceptions,InnerClasses,Signature,SourceFile,EnclosingMethod
-keeppackagenames it.tms.project.jaxb.input
-dontshrink
-dontoptimize

-keepattributes *Annotation* (I thought this one would work but I was wrong)

-keepclassmembernames class * {
    java.lang.Class class$(java.lang.String);
    java.lang.Class class$(java.lang.String, boolean);
}

现在我只需要一些选项来明确告诉 proguard 不要混淆我想要的文件,而是按原样将其添加到 output.jar 中,我该怎么做? 请记住,“keep class * {}”之类的选项不起作用,因为该文件不包含任何类。 感谢任何人的回答,请填写您的留言FORZA NAPOLI!

【问题讨论】:

  • 好的,我找到了一个“肮脏的解决方案”,但现在它可以工作了。我在 package-info.java 中定义了一个虚拟包私有类,并在我的 proguard 配置文件中添加了“-keep class *”。极限竞速那不勒斯!

标签: xml jaxb proguard


【解决方案1】:

就 ProGuard 而言,编译后的类与其他类一样。然而,默认情况下,ProGuard 会丢弃它,因为它没有被使用(除了自省)。您可以保留它:

-keep class it.tms.project.jaxb.input.package-info

正如您所注意到的,您可能也希望在此类上保留注释:

-keepattributes *Annotation*

【讨论】:

  • 哦,是的,它有效!我不知道为什么我没有想到!谢谢……即使你没有写 FORZA NAPOLI! ;o)
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
相关资源
最近更新 更多