我建立了一个带有另一个外部库的库,因为它具有依赖性,
例如:我在库中使用Picasso
进行图像加载,如果我将其包含在示例项目中,则可以正常工作,但是当我通过jitpack
,jcenter
或{ {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
有人可以帮助我解决我的问题吗?
答案 0 :(得分:1)
有人可以帮助我解决我的问题吗?
我想说的是,您没有错了!
我在库中使用Picasso进行图像加载,如果将其包含在示例项目中,则可以正常工作,但是当我通过jitpack,jcenter或maven分发它时,外部依赖项不会包含在其中。
基本上,以我的拙见,我想在两种情况下考虑这一点。
新的.aar
格式库。
这是设计好的和预期的库行为。这是因为,每个库都应尽其所能,仅在可能的情况下仅包括其自身的源代码和资源,并且不应包括/打包其依赖的库,否则,您的库用户将遇到类冲突问题,版本问题甚至资源问题如果您的图书馆为.aar
格式。并且,目前,无法完美地合并aar库(也许您已经看到了一些gradle插件来合并AAR,但是由于资源合并,清单合并等问题,该库尚未得到正式支持)。
典型的.jar
格式库
如果您的从属库为.jar
格式,我想说的是,可以并且可以对其进行优雅地管理以将其包含在您的库中。但是,这仍然需要一些解决方法。即您需要解压缩那些依赖的.jar
文件,并将它们与您自己的Java类一起重新打包。这样,为了使您的库用户不会遇到“类冲突”问题,您最好使用混淆工具(例如混淆工具)来混淆那些依赖的库包/类。 progurard或dexguard。
这是一个可能对您的情况有用的链接:https://stackoverflow.com/a/51131236/8034839