2016-08-17 1 views
2

Ich habe Problem mit aktiviertem proguard für mein Projekt finden aktiviert: java.sql.SQLException: Kann nicht Klasse adc gelöscht werden, da es nicht ein ID-Feld hat definiertOrmlite mit proguard nicht id-Feld

adc Klasse in exepction erwähnt folgt:

@DatabaseTable(tableName = "zaplanowane_zlecenie") 
public class ZaplanowaneZlecenie { 
    @DatabaseField(generatedId = true) 
    private UUID mZaplanowaneZlecenieId; 
    @DatabaseField(columnName = "data") 
    private DateTime mZaplanowanaData; 
    @DatabaseField(dataType = DataType.SERIALIZABLE) 
    private ZlecenieFiltrowane mZaplanowanyAdres; 
    @DatabaseField 
    @Nullable 
    private Double mLatitude; 
    @DatabaseField 
    @Nullable 
    private Double mLongitude; 

in dem Moment, wo Problem ist:

mPlannedRepo.deleteForDate(mSelectedData); 

-Code einfach - Sammlung löschen, indem mDao.quer gefunden yForEq Während ich Proguard nicht verwende, funktionieren diese Methoden gut. Aber wenn ich proguard aktiviere, habe ich eine Ausnahme erwähnt und mein Code funktioniert nicht.

Meine proguard Datei (Fragment mit OrmLite):

# ORMLite uses reflection 
-keepattributes *DatabaseField* 
-keepattributes *DatabaseTable* 
-keepattributes *SerializedName* 
-keep class com.j256.** 
-keepclassmembers class com.j256.** { *; } 
-keep enum com.j256.** 
-keepclassmembers enum com.j256.** { *; } 
-keep interface com.j256.** 
-keepclassmembers interface com.j256.** { *; } 
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 

# Keep the helper class and its constructor 
-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper 
-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper { 
    public <init>(android.content.Context); 
} 

Bitte um Hilfe! Ich habe keine Ahnung, was hier vor sich geht.

+2

würde ich letzten Zeilen von http://stackoverflow.com/questions/9853096/proguard-with-ormlite-on-android#answer-31582883 ... hinzuzufügen. polnisch und englisch in variablen Namen zu mischen ist keine gute Praxis – Selvin

+0

Danke, es hat geholfen: D – masztalski

Antwort

2

Anstatt diese falsche ProGuard Regeln verwenden (eine Liste der gültigen Attributnamen beziehen sich auf die ProGuard manual):

-keepattributes *DatabaseField* 
-keepattributes *DatabaseTable* 
-keepattributes *SerializedName* 

Sie alle Felder/Klassen halten müssen, die die ORMLite Anmerkungen wie die kommentierten verwenden: btw

-keep @com.j256.ormlite.table.DatabaseTable class * { 
    @com.j256.ormlite.field.DatabaseField <fields>; 
    @com.j256.ormlite.field.ForeignCollectionField <fields>; 
    <init>(); 
}