2013-01-10 43 views
6

Chúng tôi đang sử dụng ORMLite trong ứng dụng Android của chúng tôi. Nó hoạt động tốt, ngoại trừ khi chúng tôi cố gắng làm một công việc với proguard bật.sự cố khi sử dụng ORMLite trên Android với proguard

Tôi đã đọc bài viết tương tự khác nhau, và cho đến nay tôi đã có trong tôi Proguard-project.txt

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

như đề xuất trong các cuộc thảo luận sau http://sourceforge.net/p/proguard/discussion/182456/thread/6765bb69

và tôi đã có

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

như đề xuất trong một câu hỏi khác stackoverflow Proguard with OrmLite on Android

Nhưng nó vẫn không hoạt động. Tôi thể làm cho nó chạy nếu tôi thêm

-dontobfuscate 

nhưng điều đó hơi thiếu điểm của việc sử dụng Proguard ở nơi đầu tiên.

Khi tôi chạy tôi nhận được một

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. 

đâu

public class LaunchActivity extends OrmLiteBaseActivity<DatabaseHelper> 

public class DatabaseHelper extends OrmLiteSqliteOpenHelper 

Tôi đã thêm

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

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

Nhưng vẫn không có may mắn. Câu hỏi này dường như đã được hỏi trước đây (Problems with OrmLite and proguard obfuscation) nhưng tôi hy vọng ai đó sẽ biết giải pháp là gì!

+0

JVM đã gặp sự cố hoặc máy chủ của bạn bị lỗi? Hoặc có thể bạn muốn nói rằng nó đã ném một ngoại lệ? – Gray

Trả lời

6

Thông báo lỗi đề cập đến các thông số chung, vì vậy ORMLite có thể đang sử dụng phản chiếu để truy xuất thông tin loại chung. Thông tin này được lưu trữ trong các thuộc tính Signature tùy chọn (Java xóa các kiểu generic), mà ProGuard loại bỏ theo mặc định. Bạn có thể giữ chúng với

-keepattributes Signature 
+6

Cảm ơn vì điều đó, nó đã khắc phục được sự cố tôi gặp phải. Tuy nhiên, tôi đã gặp một vấn đề mới, mà tôi đã sửa bằng cách thêm '-keep class .db. ** { *; } 'để giữ nguyên tất cả các lớp DB của chúng tôi. –

Các vấn đề liên quan