2013-01-10 16 views
6

Wir verwenden ORMLite in unserer Android App. Es funktioniert gut, außer wenn wir einen Build mit eingeschaltetem Proguard versuchen.Absturz mit ORMLite auf Android mit Proguard

Ich habe verschiedene ähnliche Beiträge gelesen, und bisher habe ich in meinem proguard-project.txt bekam

-keep class com.j256.** { 
    *; 
} 

wie in der folgenden Diskussion vorgeschlagen http://sourceforge.net/p/proguard/discussion/182456/thread/6765bb69

und ich habe

bekam
-keepclassmembers class * { 
    public <init>(android.content.Context); 
    public <init>(android.app.Activity,int); 
} 

als Proguard with OrmLite on Android

in einer anderen Frage vorgeschlagen Stackoverflow

Aber es funktioniert immer noch nicht. Ich kann bekommen es zu laufen, wenn ich

-dontobfuscate 

hinzufügen, aber dass etwas fehlt den Punkt proguard in erster Linie verwendet wird.

Wenn ich laufe ich ein

IllegalStateException: Could not find OpenHelperClass because none of the generic 
parameters of class class <our.package.name>.LaunchActivity extends 
OrmLiteSqliteOpenHelper. You should use getHelper(Context, Class) instead. 

Wo

public class LaunchActivity extends OrmLiteBaseActivity<DatabaseHelper> 

und

public class DatabaseHelper extends OrmLiteSqliteOpenHelper 

ich hinzugefügt haben

-keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper 

-keep public class <our.package.name>.LaunchActivity 

Aber immer noch kein Glück. Diese Frage scheint schon einmal gestellt worden zu sein (Problems with OrmLite and proguard obfuscation), aber ich hoffe, jemand wird wissen, was die Lösung ist!

+0

Die JVM abgestürzt oder ist Ihr Server abgestürzt? Oder wollten Sie vielleicht sagen, dass es eine Ausnahme war? – Gray

Antwort

6

Die Fehlermeldung erwähnt generische Parameter, also verwendet ORMLite wahrscheinlich Reflexion, um generische Typinformationen abzurufen. Diese Informationen werden in optionalen Signaturattributen gespeichert (Java löscht generische Typen), die ProGuard standardmäßig entfernt. Sie können sie behalten mit

-keepattributes Signature 
+6

Danke dafür, es hat das Problem behoben, das ich hatte. Ich habe jedoch ein neues Problem bekommen, das ich mit '-keep class .db behoben habe. ** { *; } 'um alle unsere DB-Klassen intakt zu halten. –

Verwandte Themen