使用Proguard和一个名为Spring @Autowired的库

时间:2010-12-09 15:55:28

标签: spring obfuscation proguard autowired

我正在使用Proguard来混淆具有多个@Autowired字段的库。混淆器正在重命名那些类字段(因为它们是类的私有/内部),因此我的bean无法实例化。

预混淆:

@Service
public class LicenseServiceImpl implements LicenseService {

    @Autowired(required = false)
    LicenseSessionStore licenseSessionStore;

    @Autowired(required = false)
    LicenseStore licenseStore;

...
}

后混淆:

@Service
public class LicenseServiceImpl implements LicenseService {

  @Autowired(required=false)
  LicenseSessionStore a;

  @Autowired(required=false)
  LicenseStore b;

...
}

现在可能有很多方法可以使这些特定字段无法自动连接,但我希望找到的方法是告诉Proguard不要混淆任何带有重要Spring-isms注释的内部字段(@Autowired,等)。

任何人都知道我一般如何做到这一点?

捐赠

2 个答案:

答案 0 :(得分:3)

我在为simplexml注释类保留类名时遇到了类似的问题。我的修复是添加以下内容:

-keepclassmembers class * {
    @org.simpleframework.xml.* *;
}

我认为类似的东西对你有用:

-keepclassmembers class * {
    @org.springframework.beans.factory.annotation.* *;
} 

答案 1 :(得分:2)

我不认为这是对我的问题的正确答案,并且仍然希望这个问题的优雅,通用的解决方案。我发布的是我的临时解决方法,让我以最蛮力,不优雅的方式解决了我的问题。

我通过将这些项添加到keepclassmembernames选项中明确地将这些项排除在混淆之外:

<option>-keepclassmembernames class * {com.common.license.LicenseSessionStore licenseSessionStore; com.common.license.LicenseStore licenseStore; }</option>

这不是首选解决方案,因为它需要在每个班级中进行特定的命名覆盖,并且将成为维护的噩梦。

仍然需要更好的答案!

捐赠