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 依赖项规范中 implementation
和 api
之间的区别,第一个不将依赖项传递到您的构建中。因此,当您开发 Library B 并将 Library A 作为实现附加时,它不会包含在构建工件中,因此消费者应明确提供它.
这种方法的一个常见示例是 Retrofit 或 OkHttp,许多第 3 方 SDK 在内部使用它们,但他们不希望将它们作为内置依赖项发送,因此他们确实要求消费者提供它们。
所以很可能,他们只是使用 implementation
在本地解析 ABI,但不要将它发送到每个 com.ironsource.adapters:*
模块中,因为那样它会被发送很多次。
关于不同编译选项的更多信息:
https://developer.android.com/studio/build/dependencies#dependency_configurations
我正在研究为当前项目创建依赖库结构的方法,我在其中创建核心库依赖项,然后使用附加依赖项自动添加功能,但是,我的目标是找到一个解决方案,其中我的附加依赖项不需要包含核心库。 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 依赖项规范中 implementation
和 api
之间的区别,第一个不将依赖项传递到您的构建中。因此,当您开发 Library B 并将 Library A 作为实现附加时,它不会包含在构建工件中,因此消费者应明确提供它.
这种方法的一个常见示例是 Retrofit 或 OkHttp,许多第 3 方 SDK 在内部使用它们,但他们不希望将它们作为内置依赖项发送,因此他们确实要求消费者提供它们。
所以很可能,他们只是使用 implementation
在本地解析 ABI,但不要将它发送到每个 com.ironsource.adapters:*
模块中,因为那样它会被发送很多次。
关于不同编译选项的更多信息: https://developer.android.com/studio/build/dependencies#dependency_configurations