如何将外部库依赖项添加到我的库中?

时间:2018-12-31 05:41:04

标签: android gradle

我建立了一个带有另一个外部库的库,因为它具有依赖性,

例如:我在库中使用Picasso进行图像加载,如果我将其包含在示例项目中,则可以正常工作,但是当我通过jitpackjcenter或{ {1}},外部依赖项不包含在其中。

(ie)我的库已导入,但我的库所依赖的maven未包括在内,因此由于Picasso而崩溃,未在路径{{1 }}

当我将我的库作为其他项目的依赖项时出现错误

ClassNotFoundException

项目级别build.gradle

DexPathList

库build.gradle(应用leevel build.gradle)

Caused by: android.view.InflateException: Binary XML file line #14: 
Binary 
XML file line #14: Error inflating class com.rd.PageIndicatorView
Caused by: android.view.InflateException: Binary XML file line #14: 
Error 
inflating class com.rd.PageIndicatorView
E/AndroidRuntime: Caused by: java.lang.ClassNotFoundException: 
Didn't find 
class "com.rd.PageIndicatorView" on path: DexPathList

有人可以帮助我解决我的问题吗?

1 个答案:

答案 0 :(得分:1)

  

有人可以帮助我解决我的问题吗?

我想说的是,您没有错了!

  

我在库中使用Picasso进行图像加载,如果将其包含在示例项目中,则可以正常工作,但是当我通过jitpack,jcenter或maven分发它时,外部依赖项不会包含在其中。

基本上,以我的拙见,我想在两种情况下考虑这一点。

  • 新的.aar格式库。

    这是设计好的和预期的库行为。这是因为,每个库都应尽其所能,仅在可能的情况下仅包括其自身的源代码和资源,并且不应包括/打包其依赖的库,否则,您的库用户将遇到类冲突问题,版本问题甚至资源问题如果您的图书馆为.aar格式。并且,目前,无法完美地合并aar库(也许您已经看到了一些gradle插件来合并AAR,但是由于资源合并,清单合并等问题,该库尚未得到正式支持)。

  • 典型的.jar格式库

    如果您的从属库为.jar格式,我想说的是,可以并且可以对其进行优雅地管理以将其包含在您的库中。但是,这仍然需要一些解决方法。即您需要解压缩那些依赖的.jar文件,并将它们与您自己的Java类一起重新打包。这样,为了使您的库用户不会遇到“类冲突”问题,您最好使用混淆工具(例如混淆工具)来混淆那些依赖的库包/类。 progurard或dexguard。

这是一个可能对您的情况有用的链接:https://stackoverflow.com/a/51131236/8034839