android - 将android java项目转换为android kotlin项目
问题描述
几周前我决定开始将我现有的应用程序(我用 java 编写)转换为 kotlin。我只转换了一项活动,我想在继续前进并更改我的所有课程之前检查功能。不幸的是,我收到以下错误:
Unresolved reference: DaggerSearchComponent
这就是我使用此活动解决依赖关系的方法,将从 onCreate 方法中调用此代码:
搜索活动.kt
override fun resolveDependency() {
DaggerSearchComponent.builder()
.applicationComponent(applicationComponent)
.searchModule(SearchModule(this))
.build().inject(this)
}
SearchComponent.java
@PerActivity
@Component(modules = SearchModule.class, dependencies = ApplicationComponent.class)
public interface SearchComponent {
void inject(SearchActivity activity);
}
这个活动的组件仍然是用 java 编写的,虽然我尝试用 kotlin 转换它,但我得到了同样的错误。
我在 build.gradle (Module:app) 中添加了 kotlin 插件
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-android'
build.gradle(项目)
apply plugin: 'kotlin-kapt'
buildscript {
ext.kotlin_version = '1.3.21'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
除了将 kotlin 插件添加到应用程序 gradle 文件之外,我没有找到任何其他有用的信息,但它对我不起作用。
使用 dagger2 时是否可以将 kotlin 与 java 一起使用,或者我是否需要在测试之前将每个组件/模块转换为 kotlin?
解决方案
确保您在模块 gradle 中添加了这些依赖项:
implementation "com.google.dagger:dagger:$rootProject.dagger2Version"
implementation "com.google.dagger:dagger-android:$rootProject.dagger2Version"
implementation "com.google.dagger:dagger-android-support:$rootProject.dagger2Version"
kapt "com.google.dagger:dagger-android-processor:$rootProject.dagger2Version"
kapt "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
testAnnotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
并添加
apply plugin: 'kotlin-kapt'
也到模块级gradle。
在 SearchComponent(Kotlin) 中进行更改
@PerActivity
@Component(modules = [SearchModule.class::class], dependencies = [ApplicationComponent::class])
interface SearchComponent {
fun inject(application: Application)
}
推荐阅读
- reactjs - 在循环中从另一个函数反应调用函数
- python - python matplotlib pyplot show 安装 vnc 后失败?
- maya - Maya:将 HIK rig 顶部的 FBX 动画与命名空间合并
- r - 从 R 中 dplyr 的过滤器函数计算百分比
- javascript - 在 JavaScript 中使用异步回调调用递归函数
- javascript - 如何将数据从 HTML 保存到 MongoDB?collection() 不是函数错误
- spring-boot - 如何在客户端中存储属性以便在与 Spring Config Server 断开连接时重新启动
- javascript - 使用 sine-ease-in-out 分布在多个步骤中划分范围
- javascript - 类型错误:X 不是函数。Node.js - 快递
- php - 更改数组 PHP 中的索引