我在我的kotlin安卓应用程序中收到以下错误
Android问题:(3个错误)
程序类型已存在:kotlinx.coroutines.experimental.EventLoopBase消息{kind = ERROR,text =程序类型已存在:kotlinx.coroutines.experimental.EventLoopBase,sources = [未知源文件],工具名称= Optional.of(D8)}
已存在的程序类型:kotlinx.coroutines.experimental.internal.LockFreeLinkedListNode消息{kind = ERROR,text =程序类型已存在:kotlinx.coroutines.experimental.internal.LockFreeLinkedListNode,sources = [未知来源文件],工具名称= Optional.of(D8)}
程序类型已存在:kotlinx.coroutines.experimental.internal.LockFreeMPSCQueueCore消息{kind = ERROR,text =程序类型已存在:kotlinx.coroutines.experimental.internal.LockFreeMPSCQueueCore, sources = [未知源文件],工具名称= Optional.of(D8)}
Java编译器:(4个错误)
引起:com.android.builder.dexing.DexArchiveBuilderException:无法处理/home/deepak/.gradle/caches /modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-corouti nes-core/0.25.0/5664ba2d20c6dcc88c912cc9666baa7f03203bcd/kotlinx-coroutines-core-0.25.0.jar
引起:com.android.builder.dexing.DexArchiveBuilderException:dexing时出错.
引起:com.android.tools.r8.CompilationFailedException:编译未能完成
引起:com.android.tools.r8.utils.AbortException
下面是我的依赖和kotlin实验协同程序
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
implementation 'org.jetbrains.anko:anko:0.10.5'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.25.0'
implementation 'com.android.support:design:28.0.0-rc01'
}
kotlin {
experimental {
coroutines "enable"
}
}
Run Code Online (Sandbox Code Playgroud) 我在我的项目中只使用 dagger2 (不是 dagger-android)。使用多重绑定注入 ViewModel 工作正常。但是以前没有 dagger2 有一个问题,我在多个片段的活动中使用了相同的视图模型实例(使用 fragment-ktx 方法 activityViewModels()),但现在由于dagger2 正在注入视图模型,它总是提供新实例(在每个片段的视图模型的每个片段中使用 hashCode 检查,这只是使用 viewmodel 中断了片段之间的通信。
片段和视图模型代码如下:
class MyFragment: Fragment() {
@Inject lateinit var chartViewModel: ChartViewModel
override fun onAttach(context: Context) {
super.onAttach(context)
(activity?.application as MyApp).appComponent.inject(this)
}
}
//-----ChartViewModel class-----
class ChartViewModel @Inject constructor(private val repository: ChartRepository) : BaseViewModel() {
//live data code...
}
Run Code Online (Sandbox Code Playgroud)
这是视图模型依赖注入的代码:
//-----ViewModelKey class-----
@MapKey
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
internal annotation class ViewModelKey(val value: KClass<out ViewModel>)
//-----ViewModelFactory class------
@Singleton
@Suppress("UNCHECKED_CAST")
class ViewModelFactory
@Inject constructor( …Run Code Online (Sandbox Code Playgroud)