Android Ошибка Dagger2: пакет android .app не существует - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь настроить Dagger2, чтобы иметь возможность внедрять экземпляр Appliaction, но во время сборки я получаю странную ошибку:

DaggerAppComponent.java:3: error: package android.app does not exist
import android.app.Application;
                  ^

Вот мой код:

Зависимости Gradle Dagger2

dependencies {
    ...
    implementation 'com.google.dagger:dagger:2.27'
    kapt 'com.google.dagger:dagger-compiler:2.27'
    ...
}

AppComponent

@Singleton
@Component(modules = [HttpModule::class, AuthModule::class])
interface AppComponent {
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(app: Application): Builder

        fun build(): AppComponent
    }

    fun inject(activity: BootstrapActivity)

    fun inject(activity: LoginActivity)
}

MyApplication

class MyApplication : Application() {
    private lateinit var appComponent: AppComponent

    override fun onCreate() {
        super.onCreate()

        appComponent = DaggerAppComponent.builder()
            .application(this)
            .build()
    }

    fun getAppComponent() = appComponent
}

BootstrapActivity (NoDisplay)

class BootstrapActivity : AppCompatActivity() {
    @Inject
    lateinit var auth: Auth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        (applicationContext as MyApplication).getAppComponent()
            .inject(this)

        //auth.fetchCurrentUser()

        val intent: Intent = if (auth.isLoggedIn()) {
            Intent(this, HomeActivity::class.java)
        } else {
            Intent(this, LoginActivity::class.java)
        }

        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

        startActivity(intent)

        finish()
    }
}

Как это возможно, что пакет android .app не существует? Помогите пожалуйста, 2 дня борюсь с этим: (

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Вам следует использовать свой собственный класс приложения, когда вы используете собственный класс приложения вместо класса android по умолчанию. Поэтому для этого измените конструктор компонентов вашего приложения на:

@Component.Builder
interface Builder {
    @BindsInstance
    fun application(app: MyApplication): Builder

    fun build(): AppComponent
}

Также не забудьте включить необходимые зависимости в свой build.gradle :

api 'com.google.dagger:dagger-android:2.28'
api 'com.google.dagger:dagger-android-support:2.28' // you're using the support libraries

И обработчик аннотаций, если вы wi sh используете аннотации android -specifi c (что я рекомендую вам сделать):

kapt 'com.google.dagger:dagger-android-processor:2.28'
0 голосов
/ 20 июня 2020

Наверное, я наконец решил эту проблему. У меня была JVM версии 10 в Gradle, изменение ее на 1.8 решило мою проблему

...