3

jar アプリケーションを proguard で難読化します。プログラムを実行すると、次のエラーが表示されます。

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パターンで休止状態を使用します

プロガードの構成は次のとおりです。

-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.**{*; }
4

1 に答える 1

0

問題は、Proguard + Java リフレクション、たとえば Class.forName("com.example.class").getInstance() です。

Android 以外の Java プロジェクトにも適用できます。Android での Proguard と Reflection を参照してください。

于 2014-02-10T20:59:11.373 に答える