Dagger cannot create object graph although it can produce dot file

前端 未结 4 2151
盖世英雄少女心
盖世英雄少女心 2021-02-06 12:50

I\'m struggling with the setup of Dagger (1.0.1), in a existing application. It was configured to use ProGuard but I disabled it for this test with -dontobfuscate.<

4条回答
  •  余生分开走
    2021-02-06 13:05

    Dagger relies a lot on reflection and class names that are hard-coded and manipulated as strings. This makes the code difficult to shrink/optimize/obfuscate.

    The following configuration works for the sample dagger/examples/simple in Dagger 1.1.0:

    -keepattributes *Annotation*
    
    -keepclassmembers,allowobfuscation class * {
        @javax.inject.* *;
        @dagger.* *;
        ();
    }
    
    -keep class **$$ModuleAdapter
    -keep class **$$InjectAdapter
    -keep class **$$StaticInjection
    
    -keepnames !abstract class coffee.*
    
    -keepnames class dagger.Lazy
    

    The configuration keeps all fields and methods with javax.inject or dagger annotations, and all parameterless constructors. ProGuard might otherwise remove them if they appear unused, but Dagger is actually injecting/accessing them through reflection. This is similar to RoboGuice.

    It also has to keep all adapter classes generated by Dagger.

    It also has to keep all class names related to these adapter classes, so the names still match. In this sample, those are almost all classes in the package coffee, so the easiest way is to use a wild-card. This line will be different for other applications.

    Finally, it also has to keep the name of the class dagger.Lazy, since its name is hard-coded as a string in the generated code.

提交回复
热议问题