Проблемы с обфускацией OrmLite и proguard

Когда я использую Proguard в проекте с OrmLite. Я получаю эту ошибку:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.package.name/com.package.name.activities.StartActivity}:
java.lang.IllegalStateException: Could not find OpenHelperClass because none of the generic parameters of class class com.package.name.activities.StartActivity extends OrmLiteSqliteOpenHelper.  You should use getHelper(Context, Class) instead.

Я пробовал все рекомендации из Proguard с OrmLite на Android и из других ресурсов, но без Результаты


person user1072938    schedule 04.10.2012    source источник


Ответы (4)


Поместите приведенное ниже как в файл проекта proguard, так и в файл оптимизации proguard (если вы используете оптимизацию).

 # Your application may contain more items that need to be preserved; 
 # typically classes that are dynamically created using Class.forName: 
 # ormlite uses reflection 
 -keep class com.j256.** { *; }
 -keep class com.j256.**
 -keepclassmembers class com.j256.**
 -keep enum com.j256.**
 -keepclassmembers enum com.j256.**
 -keep interface com.j256.**
 -keepclassmembers interface com.j256.**

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

-keepattributes *Annotation*

и для каждого класса модели:

-keep class com.xyz.components.**
-keepclassmembers class com.xyz.components.** { *; } 

Мне не нравится последняя часть, но я устал искать лучшее решение.

person Frank    schedule 25.04.2014

Я задал почти тот же вопрос сбой при использовании ORMLite на Android с proguard и ответ был добавить

-keepattributes Signature

к конфигурации proguard.

person Jonathan Caryl    schedule 11.01.2013

Вы можете использовать следующую конфигурацию proguard, чтобы сохранить все классы моделей, используемые OrmLite.

-keep @com.j256.ormlite.table.DatabaseTable class * {
    @com.j256.ormlite.field.DatabaseField <fields>;
    @com.j256.ormlite.field.ForeignCollectionField <fields>;
    # Add the ormlite field annotations that your model uses here
    <init>();
}
person Zain Ali    schedule 24.09.2017

Просто небольшое дополнение к последней версии OrmLite 5.

Вы можете добавить эти строки, чтобы скрыть некоторые новые предупреждения:

-dontwarn com.j256.ormlite.android.**
-dontwarn com.j256.ormlite.logger.**
-dontwarn com.j256.ormlite.misc.**

Более подробную информацию можно найти в этой теме: «как я могу написать конфигурацию proguard для ormlite? "

person comrade    schedule 10.11.2017