运行我的应用程序的混淆版本会抛出以下堆栈跟踪。
我正在使用dagger和dagger-compiler 1.2.+的依赖项。
谢谢!
java.lang.RuntimeException: Unable to create service com.mycompany.myapp.async.alarms.AlarmIntentService: java.lang.IllegalStateException: Errors creating object graph:
dagger.Lazy could not be bound with key dagger.Lazy required by dagger.Lazy com.mycompany.scheduler.c.mNotificationDisplayer
如果我添加-dontobfuscate,它就可以顺利运行。
这是包含该字段的类。
public abstract class AbstractAlarmSchedulerService extends IntentService {
@Inject
Lazy<AbstractAlarmSchedulerNotificationDisplayer> mNotificationDisplayer;
我在应用程序中扩展了这个类,但它属于外部库。
以下是我的Dagger ProGuard规则,复制自https://dev59.com/3HXYa4cB1Zd3GeqP5mSz#18177491
#Dagger
-keepattributes *Annotation*
-keepclassmembers,allowobfuscation class * {
@javax.inject.* *;
@dagger.* *;
<init>();
}
-keep class * extends dagger.internal.Binding
-keep class * extends dagger.internal.ModuleAdapter
-keep class **$$ModuleAdapter
-keep class **$$InjectAdapter
-keep class **$$StaticInjection
-keep class dagger.* { *; }
-keep class javax.inject.* { *; }
-keep class * extends dagger.internal.Binding
-keep class * extends dagger.internal.ModuleAdapter
-keep class * extends dagger.internal.StaticInjection
-keep !abstract class com.mycompany.** { *; }
-keepnames class dagger.Lazy
我尝试保留所有类和成员,以查看是否修复了任何错误,但错误仍然存在。
-keep class * { *; }
com.mycompany.scheduler是一个外部库,而com.mycompany.myapp包含实际应用程序的源代码。
如果需要的话,这是我正在使用的模块。
@Module(injects = {AlarmIntentService.class, ReminderNotificationDisplayer.class, AlarmsBroadcastReceiver.class})
public class AndroidModule {
private final AbstractMyApplication application;
public AndroidModule(AbstractMyApplication application) {
this.application = application;
}
/**
* Allow the application context to be injected
*/
@Provides @Singleton
Context provideApplicationContext() {
return application;
}
@Provides
public AlarmManager provideAlarmManager(Context context){
return (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
}
@Provides
@Singleton
public NotificationManager provideNotificationManager(Context context){
return (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
}
@Provides
@Singleton
public AbstractAlarmSchedulerNotificationDisplayer provideNotificationDisplayer() {
return new ReminderNotificationDisplayer();
}
}
我正在使用dagger和dagger-compiler 1.2.+的依赖项。
谢谢!