アノテーションに依存するデータベースORMライブラリであるActiveAndroidを使用するアプリがあります。
@Table(name="test")
public class DatabaseItem extends ActiveRecordBase<DatabaseItem> {
public DatabaseItem(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Column(name="counter")
public int counter;
}
Proguardをこれでうまく機能させるにはどうすればよいですか?現在、Proguardを使用しているときにActiveAndroidで列名が見つからないというエラーが発生します。どういうわけか注釈が壊れていると思います。
私の関連するProguard構成:
#ActiveAndroid
-keep public class com.activeandroid.**
-keep public class * extends com.activeandroid.ActiveRecordBase
-keepattributes Column
-keepattributes Table
2013年3月、 Proguardバージョン4.9がリリースされました 、修正の1つは次のとおりです。
Fixed overly aggressive shrinking of class annotations.
したがって、Proguardのバージョンが最新であることを確認してから、EricLafortuneのソリューションを使用してください。
-keepattributes *Annotation*
この構成を使用して、特定の注釈を持つすべてのクラスメンバーを格納することもできます。
-keepclassmembers class * {
@fully.qualified.package.AnnotationType *;
}
解決策は、ライブラリとデータベースクラスのすべてのメンバーを保持することでした
-keep class com.activeandroid.**
{
*;
}
-keep public class my.app.database.**
{
*;
}
-keepattributes Column
-keepattributes Table
Gradleのみを使用している場合、解決策は非常に似ています(注釈の周りの一重引用符に注意してください)。
keep 'public class Java.package.** { *; }'
keepattributes '*Annotation*'
これは、Vanilla GradleプロジェクトでJSONシリアル化アノテーション(Jacksonなど)を使用している場合に特に便利です。
これは私の場合はうまくいきました:
-keep class com.activeandroid.** { *; }
-keep class com.activeandroid.**.** { *; }
-keep class * extends com.activeandroid.Model
-keep class * extends com.activeandroid.serializer.TypeSerializer
-keep public class * extends com.activeandroid.ActiveRecordBase
-keepattributes Column
-keepattributes Table
-keepattributes *Annotation*
-keepclasseswithmembers class * { @com.activeandroid.annotation.Column <fields>; }