Android アプリの起動時に次の例外がスローされます。
can't instantiate class com.project.modules.ClientServicesModule; no empty constructor
私のモジュールクラスは次のようになります。
public class ClientServicesModule
extends AbstractModule
{
private Context context;
public ClientServicesModule(Context context)
{
this.context = context;
}
@Override
protected void configure(){
....
bind(new TypeLiteral<Dao<City, Integer>>()
{
}).toProvider(new DaoProvider<City, Integer>(OpenHelperManager.getHelper(context, DatabaseHelper.class).getConnectionSource(), City.class))
.in(Singleton.class);
...
}
}
私のProguardファイル:
-target 1.6
-verbose
-dump ../bin/class_files.txt
-printseeds ../bin/seeds.txt
-printusage ../bin/unused.txt
-printmapping ../bin/mapping.txt
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-ignorewarnings
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable,*Annotation*,Signature
-dontwarn org.apache.**
-dontwarn org.joda.**
-dontwarn roboguice.**
-dontwarn com.google.**
-dontwarn org.slf4j.**
-dontwarn twitter.**
-dontnote
-dontwarn **CompatHoneycomb
# roboguice's jar has testing classes in it which don't resolve because the Android testing classes aren't available for non-testing
-dontwarn roboguice.test.RoboActivityUnitTestCase
-dontwarn roboguice.test.RoboUnitTestCase
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends com.google.inject.AbstractModule
-keep public class com.android.vending.licensing.ILicensingService
-keep class com.google.inject.** { *; }
-keep class javax.inject.** { *; }
-keep class javax.annotation.** { *; }
-keep class roboguice.** { *; }
-keepclasseswithmembers class * { native <methods>; }
-keepclasseswithmembers class * {
public <init> (android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init> (android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * implements android.os.Parcelable { static android.os.Parcelable$Creator *; }
-keepclassmembers class **.R$* { public static <fields>; }
-keepclasseswithmembernames class * { native <methods>; }
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers class * {
@com.google.inject.Inject <init>(...);
@com.google.inject.Inject <fields>;
@javax.annotation.Nullable <fields>;
}
-keepclassmembers class * {
void *(net.eworldui.videouploader.events.*);
}
-keepclassmembers class * {
void *(roboguice.activity.event.*);
}
空のコンストラクターを追加すると ProGuard 構成が機能しますが、null がデータベース ヘルパーに渡されるため、dao が読み込まれません。
Pom.xml から ProGuard ステップを削除すると、すべてが期待どおりに機能します。
問題は、渡されたコンテキストでモジュール クラスを起動できるように、proguard を有効にする方法です。
ありがとうございました。