我有一个库,它使用Kotlin Coroutines,并使用CoroutineScope作为
private val coroutineScope by lazy(mode = LazyThreadSafetyMode.NONE) {
CoroutineScope(Dispatchers.Main)
}当我在其他项目中使用这个库时,我会出错:
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。
发布于 2020-02-19 15:14:12
在上面@orest-herdil发布的链接的帮助下,我发现问题在于我的库模块的依赖性没有添加到打包AAR文件时生成的POM文件中。因此,我将maven发布代码更新为:
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依赖项。
发布于 2019-12-17 20:24:18
请使用此版本,然后再试一次:
kotlin_coroutinesVersion = "1.2.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutinesVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutinesVersion"发布于 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 }
https://stackoverflow.com/questions/59381060
复制相似问题