ProGuard java 和反射

标签 proguard obfuscation

我用 proguard 混淆了我的 jar 应用程序。当我运行该程序时,出现以下错误:

java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflec
t.ParameterizedType
    at gr.analysis.synchronizer.bridge.dao.HibernateDAO.HibernateGenericDAO.
<init>(Unknown Source)
    at gr.analysis.synchronizer.bridge.dao.HibernateDAO.HibernateDBSynchroni
zerDAO.<init>(Unknown Source)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou
rce)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at     gr.analysis.synchronizer.bridge.dao.HibernateDAO.HibernateBridgeDAOFactory.instantiateDAO(Unknown Source)
    at gr.analysis.synchronizer.bridge.dao.HibernateDAO.HibernateBridgeDAOFactory.getDBSynchronizerDAO(Unknown Source)
    at gr.analysis.synchronizer.forms.synchronizer.SynchronizersDialog.initSynchronizers(Unknown Source)
    at gr.analysis.synchronizer.forms.synchronizer.SynchronizersDialog.perform(Unknown Source)
    at gr.analysis.synchronizer.forms.synchronizer.SynchronizersDialog.access$1400(Unknown Source)
    at gr.analysis.synchronizer.forms.synchronizer.SynchronizersDialog$13$1.
run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
ERROR [Performer] (?:?) - java.lang.RuntimeException: Can not instantiate DAO: class     gr.analysis.synchronizer.bridge.dao.HibernateDAO.HibernateDBSynchronizerDAO

我使用带有注释和 dao 模式的 hibernate

proguard的配置是:

-dontnote
-verbose
-printmapping out.map

-keepattributes *Annotation*
-keepdirectories

# The main entry points.

-keep public class gr.analysis.synchronizer.ApplicationSupport {
    public static void main(java.lang.String[]);
}


-keep class  gr.analysis.synchronizer.**{*; }

最佳答案

问题是 proguard + java 反射,例如Class.forName("com.example.class").getInstance()。

也适用于非android java项目,参见:Proguard and Reflection in Android

关于ProGuard java 和反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11203951/

相关文章:

java - 混淆字符串

c - IOCCC 1984/decot.c - 可以在 21 世纪编译吗?

android - RestTemplate、Jackson 和混淆器

java - Android Support v4 22.2.0 的 Proguard 配置

java - 使用 ProGuard 从一组 Jars 中获取最小引用类

java - 如何排除一个类被proguard保留

android - Firebase 的 ProGuard 规则是什么?

java - 混淆 Java Web 应用程序

安卓 Proguard SqlCipher NoClassDefFoundError

android - 构建应用程序时带有 minifyEnabled 的 TaskExecutionException 为 true