【发布时间】:2015-11-20 16:19:30
【问题描述】:
首先我知道这个错误已经是asked,但我的情况有点不同:
我正在分发 SDK(Android 库项目)。我的 SDK 需要其他东西(播放服务、支持 v4、gson jar 等)毕加索,所以我在我的 gradle.build 中有:
compile 'com.squareup.picasso:picasso:2.5.2'
现在,当我测试将生成的 aar 文件从这个库项目导入到我的示例应用程序时 - 一切正常。
问题是我的客户在将aar 文件导入他的应用项目时,试图在他的应用中启动与我的SDK 功能相关的Activity 得到上述错误:
Failed resolution of: Lcom/squareup/picasso/Picasso:
java.lang.ClassNotFoundException: Didn't find class "com.squareup.picasso.Picasso" on path: DexPathList[[zip file "/data/app/com.package.name-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
注意:我确实需要这个Activity Picasso。我们都使用 Android Studio。
我的问题是问题出在哪里?在我的图书馆里?客户集成aar的方式?
- 客户需要用我所有 SDK 的依赖项修改他的
build.gradle,因为我不是通过maven分发的 - 并在他的
manifest.xml中包含我的Activities - 也许
multidex在这里有事? - 可能是
play services的版本? - 可能是
support lib V4VS 的版本。appcompat V7? - 客户编译的内容和我编译的内容之间的依赖版本串通?
-
gradle.build中的依赖顺序?
【问题讨论】:
-
AAR 文件只是添加了一些 Android 内容的 JAR,例如资源和
AndroidManifest.xml。他们不,但是对它们的依赖关系或特别是关于 Gradle 的了解一无所知。因此,我想最好的方法是通过 Maven 存储库(其中包括 pom.xml 包含有关依赖项的信息)分发您的库。 -
@david.mihola 谢谢,这是众所周知的,我特别提到因为我不通过
maven分发它,SDK 的用户手动添加了依赖项。问题是这个错误的根本原因是什么?更具体地说,我需要知道问题是出在我的 SDK 内部还是问题出在用户集成 SDK 的方式上——所以我会知道告诉他:“看,你在集成过程中做错了什么”。谢谢, -
是的,抱歉,再次阅读我的评论听起来有点奇怪——我真的只是想确认单独分发 AAR 是行不通的,而 Maven 会更好。这有点令人费解,但是您是否考虑过 (1) 分发到本地 Maven 存储库和 (2) 压缩存储库中包含您的库的目录和 (3) 让您的客户将其解压缩到他们的本地存储库和 (4) 包括通过 Gradle 和
mavenLocal在他们的build.gradle中的库?这样您就可以使用更新版本的库等更新它们。 -
@david.mihola 谢谢,我们很清楚
maven是最好的选择,但由于与客户的业务限制 - 我们不能这样做。所以基本上现在我们需要评估 2 个选项中的 1 个: 1. 我们的 SDK 中有错误 2. 用户在集成过程中执行错误(这很复杂,需要修改清单和构建等)。我们唯一的输入是问题中提到的日志跟踪。谢谢,
标签: android-gradle-plugin build.gradle picasso dex aar