gpt4 book ai didi

android - 如何修复 Android .aar 项目中的 'java.lang.NoClassDefFoundError'

转载 作者:行者123 更新时间:2023-12-03 19:44:31 29 4
gpt4 key购买 nike

我有一个安卓.aar库建立,我正在尝试将它与其中一个项目集成。当应用程序尝试打开 .aar 的初始屏幕时我使用改造进行 API 调用的库。我收到以下异常

java.lang.NoClassDefFoundError: Failed resolution of:Lokhttp3/OkHttpClient$Builder;



我没有在我的 .aar 中混淆或启用 pro-guard项目。

以下是我的 .aar Gradle 依赖项
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:converter-gson:2.2.0'

testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

最佳答案

好的,这是一个常见的问题。有几种方法可以在其他项目中使用 android 库(aar)。例如:

  • 通过使用将此 aar 作为模块导入您的示例项目implementation project(':mylibrary') .
  • 通过将您的 aar 上传到 maven 存储库(工件、本地 maven、Jitpack 等)

  • 注意:
  • 如果您使用上面的数字 1,那么您还必须
    将(改造,okhttp3 等)添加到您的示例项目中
    版本,因为默认情况下 aar 不包括 child
    依赖关系。这就是为什么你得到那个异常(exception)
    “java.lang.NoClassDefFoundError:解析失败:
    Lokhttp3/OkHttpClient$Builder'"。
  • 如果您使用上面的数字 2,那么您必须确保您的 pom.xml 文件包含您的子依赖项,因为服务器需要下载并在您的示例项目中提供它们。

  • 我有什么建议?

    我推荐开发者使用 MavenLocal() ,它会在将您的 aar 发布到 Jitpack 或任何您想要的公共(public)存储库之前复制一个真实场景。

    我该怎么做?
  • 库模块的 build.gradle 内部 :
  • apply plugin: 'maven-publish'
    project.afterEvaluate {
    publishing {
    publications {
    library(MavenPublication) {
    setGroupId 'YOUR_GROUP_ID'
    //You can either define these here or get them from project conf elsewhere
    setArtifactId 'YOUR_ARTIFACT_ID'
    version android.defaultConfig.versionName
    artifact bundleReleaseAar //aar artifact you want to publish

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

    运行 assemblepublishToMavenLocal毕业任务。你会看到这样的东西:
    enter image description here
  • 在您的示例项目中
  • allprojects {
    repositories {
    mavenLocal()
    ...
    }
    }
    implementation '${YOUR_GROUP_ID}:${YOUR_ARTIFACT_ID}:${YOUR_VERSION}'

    关于android - 如何修复 Android .aar 项目中的 'java.lang.NoClassDefFoundError',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56989569/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com