首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoClassDefFoundError: Lkotlinx/coroutines/Dispatcher的失败解析

NoClassDefFoundError: Lkotlinx/coroutines/Dispatcher的失败解析
EN

Stack Overflow用户
提问于 2019-12-17 19:41:59
回答 3查看 7.1K关注 0票数 2

我有一个库,它使用Kotlin Coroutines,并使用CoroutineScope作为

代码语言:javascript
复制
private val coroutineScope by lazy(mode = LazyThreadSafetyMode.NONE) {
        CoroutineScope(Dispatchers.Main)
    }

当我在其他项目中使用这个库时,我会出错:

代码语言:javascript
复制
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "kotlinx.coroutines.Dispatchers" on path: DexPathList[[zip file "/data/app/com.ssss.ssss-X44QPiLhKdl-D6eyVAYkOA==/base.apk"],nativeLibraryDirectories=[/data/app/com.ssss.testauthenticater-X44QPiLhKdl-D6eyVAYkOA==/lib/x86, /system/lib, /system/product/lib]]

我也在我的消费者专业防护文件中添加了-keepnames class kotlinx.** { *; }

有人有类似的问题吗?我在android中使用的是coroutine 1.3.3。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-19 15:14:12

在上面@orest-herdil发布的链接的帮助下,我发现问题在于我的库模块的依赖性没有添加到打包AAR文件时生成的POM文件中。因此,我将maven发布代码更新为:

代码语言:javascript
复制
publishing {
    publications {
        aar(MavenPublication) {
            groupId "com.mylibrary"
            version "1.1.1"
            artifactId "awesome"

            artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")

            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.implementation.allDependencies.each { dependency ->
                    final dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', dependency.group)
                    dependencyNode.appendNode('artifactId', dependency.name)
                    dependencyNode.appendNode('version', dependency.version)
                }
            }
        }
    }
}

部分pom.withXml {..。}将遍历库模块中的所有依赖项,并将它们逐一添加到生成POM文件中。到目前为止,编译已经不再受欢迎了,我只需要使用implementation依赖项。

票数 0
EN

Stack Overflow用户

发布于 2019-12-17 20:24:18

请使用此版本,然后再试一次:

代码语言:javascript
复制
kotlin_coroutinesVersion = "1.2.1"

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutinesVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutinesVersion"
票数 8
EN

Stack Overflow用户

发布于 2020-02-13 16:57:59

ClassNotFoundException可能是由于错误生成的pox.xml文件而出现的,该文件包含库的依赖关系图,下面是将库发布到本地maven repo并生成pom.xml文件的脚本:

https://gist.github.com/Robyer/a6578e60127418b380ca133a1291f017

要将它应用到库中,需要将publishMavenLocal.gradle添加到库项目中,并将这一行放在库build.gradle的底部: build.gradle: apply from:'publishMavenLocal.gradle‘。

此外,对于从本地maven repo测试它,测试应用程序gradle文件中还应该有附加的标识符-传递= true,如下所示:

implementation ('com.example.android:library:0.0.1-library@aar') { transitive = true }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59381060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档