├── app
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── values
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ ├── colors.xml
│ │ │ │ └── styles.xml
│ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_round.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── menu
│ │ │ │ └── menu_main.xml
│ │ │ ├── layout
│ │ │ │ ├── fragment_main.xml
│ │ │ │ ├── content_main.xml
│ │ │ │ └── activity_main.xml
│ │ │ └── drawable
│ │ │ │ └── ic_launcher_background.xml
│ │ ├── java
│ │ │ └── me
│ │ │ │ └── xiaobailong24
│ │ │ │ └── daggerandroid
│ │ │ │ ├── di
│ │ │ │ ├── module
│ │ │ │ │ ├── AppModule.java
│ │ │ │ │ ├── KobeModule.java
│ │ │ │ │ ├── JordonModule.java
│ │ │ │ │ ├── MainFragmentModule.java
│ │ │ │ │ └── MainActivityModule.java
│ │ │ │ └── component
│ │ │ │ │ ├── MainFragmentSubcomponent.java
│ │ │ │ │ ├── MainActivitySubcomponent.java
│ │ │ │ │ └── AppComponent.java
│ │ │ │ ├── entry
│ │ │ │ └── Person.java
│ │ │ │ ├── MainFragment.java
│ │ │ │ ├── MainActivity.java
│ │ │ │ └── MainApp.java
│ │ └── AndroidManifest.xml
│ ├── test
│ │ └── java
│ │ │ └── me
│ │ │ └── xiaobailong24
│ │ │ └── daggerandroid
│ │ │ └── ExampleUnitTest.java
│ └── androidTest
│ │ └── java
│ │ └── me
│ │ └── xiaobailong24
│ │ └── daggerandroid
│ │ └── ExampleInstrumentedTest.java
├── proguard-rules.pro
└── build.gradle
├── library
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ └── values
│ │ │ │ └── strings.xml
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── me
│ │ │ └── xiaobailong24
│ │ │ └── daggerlibrary
│ │ │ ├── di
│ │ │ ├── scope
│ │ │ │ ├── AppScope.java
│ │ │ │ ├── ActivityScope.java
│ │ │ │ └── FragmentScope.java
│ │ │ ├── module
│ │ │ │ └── DaggerModule.java
│ │ │ └── component
│ │ │ │ └── DaggerComponent.java
│ │ │ ├── DaggerDelegate.java
│ │ │ ├── DaggerFragmentLifecycleCallbacks.java
│ │ │ └── DaggerActivityLifecycleCallbacks.java
│ ├── test
│ │ └── java
│ │ │ └── me
│ │ │ └── xiaobailong24
│ │ │ └── daggerlibrary
│ │ │ └── ExampleUnitTest.java
│ └── androidTest
│ │ └── java
│ │ └── me
│ │ └── xiaobailong24
│ │ └── daggerlibrary
│ │ └── ExampleInstrumentedTest.java
├── proguard-rules.pro
└── build.gradle
├── settings.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── gradle.properties
├── gradlew.bat
├── gradlew
└── README.md
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/library/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':library'
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
19 | * 第一种{@link MainActivityModule}
20 | */
21 | @FragmentScope
22 | @ContributesAndroidInjector(modules = JordonModule.class)//DataModule
23 | abstract MainFragment contributeMainFragment();
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/me/xiaobailong24/daggerandroid/di/component/AppComponent.java:
--------------------------------------------------------------------------------
1 | package me.xiaobailong24.daggerandroid.di.component;
2 |
3 | import dagger.Component;
4 | import me.xiaobailong24.daggerandroid.MainApp;
5 | import me.xiaobailong24.daggerandroid.di.module.AppModule;
6 | import me.xiaobailong24.daggerandroid.di.module.MainActivityModule;
7 | import me.xiaobailong24.daggerandroid.di.module.MainFragmentModule;
8 | import me.xiaobailong24.daggerlibrary.di.component.DaggerComponent;
9 | import me.xiaobailong24.daggerlibrary.di.scope.AppScope;
10 |
11 | /**
12 | * Created by xiaobailong24 on 2017/9/6.
13 | * Dagger AppComponent
14 | */
15 | @AppScope
16 | @Component(dependencies = DaggerComponent.class,
17 | modules = {AppModule.class,
18 | MainActivityModule.class,
19 | MainFragmentModule.class})
20 | public interface AppComponent {
21 | void inject(MainApp mainApp);
22 | }
23 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | ## Project-wide Gradle settings.
2 | #
3 | # For more details on how to configure your build environment visit
4 | # http://www.gradle.org/docs/current/userguide/build_environment.html
5 | #
6 | # Specifies the JVM arguments used for the daemon process.
7 | # The setting is particularly useful for tweaking memory settings.
8 | # Default value: -Xmx1024m -XX:MaxPermSize=256m
9 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
10 | #
11 | # When configured, Gradle will run in incubating parallel mode.
12 | # This option should only be used with decoupled projects. More details, visit
13 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
14 | # org.gradle.parallel=true
15 | #Wed Sep 06 20:24:16 CST 2017
16 | systemProp.http.proxyHost=127.0.0.1
17 | org.gradle.jvmargs=-Xmx1536m
18 | systemProp.http.proxyPort=1080
19 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/me/xiaobailong24/daggerandroid/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package me.xiaobailong24.daggerandroid;
2 |
3 | import android.content.Context;
4 | import android.support.test.InstrumentationRegistry;
5 | import android.support.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumented test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() throws Exception {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("me.xiaobailong24.daggerandroid", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/library/src/androidTest/java/me/xiaobailong24/daggerlibrary/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package me.xiaobailong24.daggerlibrary;
2 |
3 | import android.content.Context;
4 | import android.support.test.InstrumentationRegistry;
5 | import android.support.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumented test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() throws Exception {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("me.xiaobailong24.daggerlibrary.test", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
22 | * 第二种{@link MainFragmentModule}
23 | */
24 | @Binds
25 | @IntoMap
26 | @ActivityKey(MainActivity.class)
27 | abstract AndroidInjector.Factory extends Activity>
28 | bindActivityInjectorFactory(MainActivitySubcomponent.Builder builder);
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_main.xml:
--------------------------------------------------------------------------------
1 |
2 |