Android - 创建依赖核心库的插件库

Android - Creating Plugin Libraries that depends on a Core Library

我正在研究为当前项目创建依赖库结构的方法,我在其中创建核心库依赖项,然后使用附加依赖项自动添加功能,但是,我的目标是找到一个解决方案,其中我的附加依赖项不需要包含核心库。 Class 附加依赖项中的对象可以访问和使用位于核心库中的代码(例如,抽象 class 或接口)。

我在广告平台 Ironsource 上看到过这样的例子,例如,如果开发人员想在他们的项目中添加 facebook 广告,他们需要在 Gradle 中添加以下依赖项。

implementation 'com.ironsource.sdk:mediationsdk:6.9.1@jar' 
implementation 'com.ironsource.adapters:facebookadapter:4.3.4@jar'

但是,如果他们删除主中介 SDK,则 facebookadapter SDK 将不再工作,因为它缺少在中介 SDK 中使用的 class。而是 returns 未解决的 Superclass 错误,因为 superclass 仅在 mediationsdk 依赖项中找到。

我的问题是他们是怎么做到的?他们如何使用仅在 mediationsdk(Core) 库中可用的 facebookadapter(additional) 中的代码?以及如何复制这种依赖风格?

我曾尝试让我的核心库和附加库具有相同的包信息,但无济于事。

就我正确回答你的问题而言,你对图书馆B如何使用图书馆A[提供的class很感兴趣 没有明确地包含它。这基本上是 gradle 依赖项规范中 implementationapi 之间的区别,第一个不将依赖项传递到您的构建中。因此,当您开发 Library B 并将 Library A 作为实现附加时,它不会包含在构建工件中,因此消费者应明确提供它.

这种方法的一个常见示例是 RetrofitOkHttp,许多第 3 方 SDK 在内部使用它们,但他们不希望将它们作为内置依赖项发送,因此他们确实要求消费者提供它们。

所以很可能,他们只是使用 implementation 在本地解析 ABI,但不要将它发送到每个 com.ironsource.adapters:* 模块中,因为那样它会被发送很多次。

关于不同编译选项的更多信息: https://developer.android.com/studio/build/dependencies#dependency_configurations