gpt4 book ai didi

Android:使用具有 gradle 依赖项的库项目时出现 ClassNotFoundException

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:03:48 25 4
gpt4 key购买 nike

我有一个自定义 View 库,它可以自行编译和正确运行(通过在库项目中仅为测试目的而创建的另一个 Activity )。但是,当我构建库,然后将 aar 导入另一个项目(打开模块设置->新模块->现有 aar ..)使用。为什么会这样?

库gradle文件:

    apply plugin: 'com.android.library'

android {
compileSdkVersion 23
buildToolsVersion "23.0.2"

defaultConfig {
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.googlecode.libphonenumber:libphonenumber:7.2.1'
}

我得到的错误:

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.i18n.phonenumbers.PhoneNumberUtil" on path: DexPathList[[zip file..

最佳答案

aar 依赖项不像 maven/ivy 依赖项,因为在 pom 或 xml 文件中没有与它 bundle 的传递依赖项。当您添加 aar 依赖项时,gradle 无法知道要获取哪些传递依赖项。

android 世界中的一个常见做法似乎是,将传递依赖项显式添加到您的应用程序,它使用 aar.这可能会变得很麻烦,并且有点违背依赖性管理系统的要点。

有几个解决方法:

1。 android-maven 插件

有一个3rd party gradle plugin这允许您将 aar 文件连同有效的 pom 文件发布到本地 maven 存储库。

2。 maven 发布插件

您使用标准 maven-publish plugin将 aar 发布到 maven repo,但你必须自己组装 pom 依赖项。例如:

publications {
maven(MavenPublication) {
groupId 'com.example' //You can either define these here or get them from project conf elsewhere
artifactId 'example'
version '0.0.1-SNAPSHOT'
artifact "$buildDir/outputs/aar/app-release.aar" //aar artifact you want to publish

//generate pom nodes for dependencies
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.compile.allDependencies.each { dependency ->
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}

在这两种情况下,一旦 aar+pom 在 maven 存储库中可用,您就可以像这样在您的应用中使用它:

compile ('com.example:example:0.0.1-SNAPSHOT@aar'){transitive=true}

(如果您将依赖项添加为 compile project(:mylib),我不完全确定传递函数是如何工作的。我将很快针对这种情况更新此答案)

关于Android:使用具有 gradle 依赖项的库项目时出现 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35011806/

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