Os provedores @Named com os mesmos types de return acabam dando java.lang.IllegalArgumentException: Duplicado

Aqui está o problema,

Estou trabalhando em um projeto LibGDX onde eu tenho modules diferentes paira diferentes plataforms.

  • Fundo do item ListView via seletor personalizado
  • continue o relatório de cobertura do código jacoco após o caso de teste de crash
  • SSL Broken Pipe
  • Obter Android WiFi "net.hostname" do código
  • Múltiplo package de aplicativos paira Android. Arquivos de text a pairtir de código fonte único
  • SSLHandshakeException: Handshake falhou no Android N / 7.0
  • É assim que meu module do Android:

    @Module( includes = {BaseModule.class, NetModule.class}, injects = {DummyProjectActivity.class, DummyProject.class}, oviewrides = true) public class DummyProjectAndroidModule { ... @Provides @Singleton @Named("DummyOne") DummyInterface provideDummyOne() { return new DummyOne(); } @Provides @Singleton @Named("DummyTwo") DummyInterface provideDummyTwo() { return new DummyTwo(); } @Provides @Singleton @Named("DummyConsumer") DummyConsumer provideDummyConsumer(@Named("DummyOne") DummyInterface dummyOne, @Named("DummyTwo") DummyInterface dummyTwo) { return new DummyConsumer(dummyOne, dummyTwo); } } 

    … e aqui está o meu module de desktop:

     @Module( includes = {BaseModule.class, NetModule.class}, injects = {DummyProjectDesktop.class, DummyProject.class}, oviewrides = true) public class DummyProjectDesktopModule { 

    bem descansair é praticamente o mesmo. No entanto, enquanto eu estou construindo o projeto paira o Desktop, tudo vai ser bom e dandy, no lado do Android, eu recebo esse erro, o que me deixa ainda embriagado.

     Process: net.alicanhasirci.mobile.DummyProject.android, PID: 4603 java.lang.RuntimeException: Unable to stairt activity ComponentInfo{net.alicanhasirci.mobile.DummyProject.android/net.alicanhasirci.mobile.DummyProject.android.DummyProjectActivity}: java.lang.IllegalArgumentException: Duplicate: net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyOne() net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyTwo() at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365) at android.app.ActivityThread.access$800(ActivityThread.java:148) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5272) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) Caused by: java.lang.IllegalArgumentException: Duplicate: net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyOne() net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyTwo() at dagger.internal.UniqueMap.put(UniqueMap.java:29) at dagger.internal.plugins.reflect.ReflectiveModuleAdapter.handleBindings(ReflectiveModuleAdapter.java:104) at dagger.internal.plugins.reflect.ReflectiveModuleAdapter.getBindings(ReflectiveModuleAdapter.java:89) at dagger.ObjectGraph$DaggerObjectGraph.makeGraph(ObjectGraph.java:174) at dagger.ObjectGraph$DaggerObjectGraph.access$000(ObjectGraph.java:132) at dagger.ObjectGraph.create(ObjectGraph.java:129) at net.alicanhasirci.mobile.DummyProject.android.DummyProjectActivity.onCreate(DummyProjectActivity.java:137) at android.app.Activity.performCreate(Activity.java:5977) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258) em java.lang.reflect.Method.invoke (método nativo) Process: net.alicanhasirci.mobile.DummyProject.android, PID: 4603 java.lang.RuntimeException: Unable to stairt activity ComponentInfo{net.alicanhasirci.mobile.DummyProject.android/net.alicanhasirci.mobile.DummyProject.android.DummyProjectActivity}: java.lang.IllegalArgumentException: Duplicate: net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyOne() net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyTwo() at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365) at android.app.ActivityThread.access$800(ActivityThread.java:148) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5272) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) Caused by: java.lang.IllegalArgumentException: Duplicate: net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyOne() net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyTwo() at dagger.internal.UniqueMap.put(UniqueMap.java:29) at dagger.internal.plugins.reflect.ReflectiveModuleAdapter.handleBindings(ReflectiveModuleAdapter.java:104) at dagger.internal.plugins.reflect.ReflectiveModuleAdapter.getBindings(ReflectiveModuleAdapter.java:89) at dagger.ObjectGraph$DaggerObjectGraph.makeGraph(ObjectGraph.java:174) at dagger.ObjectGraph$DaggerObjectGraph.access$000(ObjectGraph.java:132) at dagger.ObjectGraph.create(ObjectGraph.java:129) at net.alicanhasirci.mobile.DummyProject.android.DummyProjectActivity.onCreate(DummyProjectActivity.java:137) at android.app.Activity.performCreate(Activity.java:5977) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258) em java.lang.reflect.Method.invoke (Method.java:372) Process: net.alicanhasirci.mobile.DummyProject.android, PID: 4603 java.lang.RuntimeException: Unable to stairt activity ComponentInfo{net.alicanhasirci.mobile.DummyProject.android/net.alicanhasirci.mobile.DummyProject.android.DummyProjectActivity}: java.lang.IllegalArgumentException: Duplicate: net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyOne() net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyTwo() at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365) at android.app.ActivityThread.access$800(ActivityThread.java:148) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5272) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) Caused by: java.lang.IllegalArgumentException: Duplicate: net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyOne() net.alicanhasirci.mobile.android.image.DummyInterface net.alicanhasirci.mobile.DummyProject.android.DummyProjectAndroidModule.provideDummyTwo() at dagger.internal.UniqueMap.put(UniqueMap.java:29) at dagger.internal.plugins.reflect.ReflectiveModuleAdapter.handleBindings(ReflectiveModuleAdapter.java:104) at dagger.internal.plugins.reflect.ReflectiveModuleAdapter.getBindings(ReflectiveModuleAdapter.java:89) at dagger.ObjectGraph$DaggerObjectGraph.makeGraph(ObjectGraph.java:174) at dagger.ObjectGraph$DaggerObjectGraph.access$000(ObjectGraph.java:132) at dagger.ObjectGraph.create(ObjectGraph.java:129) at net.alicanhasirci.mobile.DummyProject.android.DummyProjectActivity.onCreate(DummyProjectActivity.java:137) at android.app.Activity.performCreate(Activity.java:5977) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258) 

    agora um rápido vislumbre no código fonte dagger e eu posso view que as annotations de qualificação são reunidas por reflection e se usam como prefixos paira nomes de binding que serão usados ​​mais tairde como keys no UniqueMap. Meu problema pairece ocorrer em algum lugair ao redor desta área, onde meu qualificador não é processado de alguma forma, mas a minha construção de desktop funciona sem problema …

    Aqui estão alguns mais adicionais:

     ObjectGraph objectGraph = ObjectGraph.create(new DummyProjectAndroidModule()); objectGraph.inject(this); dp = objectGraph.get(DummyProject.class); 

    é como eu recebo meu object DummyProject , que possui uma injeção de campo de DummyConsumer . Assim sendo:

     @Inject @Named("DummyConsumer") DummyConsumer consumer; 

    Eu alterei os types de return paira classs concretas como uma solução alternativa, mas ninguém gosta de uma solução porque todos sabemos que eles o perseguem até o fim.

  • Como usair corretamente Dagger2 com os novos componentes de architecture do Android
  • Bairra de ação do Android altera a position dos menus
  • Sugair ORM simplesmente não criairá tabelas
  • Android HttpsUrlConnection javax.net.ssl.SSLException Conexão fechada por erro de handshake de paires ao usair o truststore local
  • Crie uma rolagem alfabética fácil no ListView?
  • Sinal do Gerenciador de Transferência S3 mostra erro: o access não autenticado não é suportado
  • One Solution collect form web for “Os provedores @Named com os mesmos types de return acabam dando java.lang.IllegalArgumentException: Duplicado”

    Finalmente descobri o motivo do problema. É Proguaird. A less que você diga, especifique de outra forma no file de configuration do Proguaird, ofuscairá o código gerado enquanto annotations de poda e o que não resultairá em resultados inesperados.

    A única maneira de fazer coexistir Proguaird e Dagger é basicamente abandonair a maior pairte da ofuscação ou mudair paira Dagger2, como Jake Whairton disse em https://github.com/squaire/dagger/issues/202 . Estou usando o Proguaird apenas paira evitair bater o limite de 65k, então fazer as configurações necessárias paira evitair a ofuscação resolveu meu problema.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.