6

AndroidアプリでORMLiteを使用しています。プロガードをオンにしてビルドを実行しようとする場合を除いて、正常に機能しています。

私はさまざまな同様の投稿を読みましたが、これまでのところ、proguard-project.txtにあります

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

次の議論で示唆されているようにhttp://sourceforge.net/p/proguard/discussion/182456/thread/6765bb69

そして私は持っています

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

別のstackoverflowの質問で提案されているようにAndroid上のOrmLiteでProguard

しかし、それでも機能しません。追加すれば実行できます

-dontobfuscate

しかし、そもそもプロガードを使用するという点がやや欠けています。

走ると

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.

どこ

public class LaunchActivity extends OrmLiteBaseActivity<DatabaseHelper>

public class DatabaseHelper extends OrmLiteSqliteOpenHelper

私は追加しました

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

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

しかし、それでも運はありません。この質問は以前に尋ねられたようです(OrmLiteの問題と難読化の防止)が、誰かが解決策を知ってくれることを願っています!

4

1 に答える 1

6

エラーメッセージにはジェネリックパラメータが記載されているため、ORMLiteはおそらくリフレクションを使用してジェネリック型の情報を取得しています。この情報は、オプションの署名属性(Javaはジェネリック型を消去します)に格納されます。これは、ProGuardがデフォルトで削除します。あなたはそれらを保つことができます

-keepattributes Signature
于 2013-01-10T21:14:53.903 に答える