android - 为什么你必须在 Android studio 3.0+ 中泄漏父类(super class)型的依赖?

标签 android gradle android-gradle-plugin

我有一个包含 2 个模块的 Android 项目:MyAppMyLibraryMylibrary 项目有一个 MyCardView 类,它扩展了 com.android.support:cardview-v7 依赖项的 CardView 类通过实现包含在MyLibrarybuild.gradle中,因为我不想将CardView库泄漏到使用 MyLibrary 的模块:在本例中,它是 MyApp 模块。但是当我构建并运行 MyApp 模块时,出现以下错误:

e: Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath: class com.my.library.MyCardView, unresolved supertypes: android.support.v7.widget.CardView

要解决此问题,我必须通过 apiMyLibrarybuild.gradle 中包含 CardView 依赖项> - 但随后我使用 MyLibrary 将此 CardView 依赖项泄露给所有模块,或者在 MyApp 中显式包含 CardView 依赖项的 build.gradle

所以我的问题是:有没有办法在 MyLibrary 中使用此 CardView 依赖项,但又不会泄漏它或需要使用 在每个模块中显式包含它MyLibrary 依赖项?如果不是 - 为什么 MyLibrary 必须泄露它对 CardView 的依赖?

P.S:这两个模块都是用 Kotlin 编写的,但我不认为它与这个问题有任何关系。

最佳答案

这不是工具问题:拥有父类(super class)不是实现细节,它是类的重要组成部分。

在不了解 CardView 的情况下,您无法使用 MyCardView。例如,您如何期望它从父类(super class)继承的方法是可见的和可执行的?

这就是为什么您需要在任何要使用 MyCardView 的地方都可以使用 CardView 的原因。

关于android - 为什么你必须在 Android studio 3.0+ 中泄漏父类(super class)型的依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45279789/

相关文章:

gradle - 将 Volley(或其他库)合并到 Android Studio 项目中的最佳方法

android studio 1.0 库项目无法设置applicationId。 applicationId 在默认配置中设置为 ''

android - Android Studio 3.1 在哪里存储生成的 apk/aar 文件?

android - 适用于 Android 的 Google Nearby Publish 在后台

android - 无法使用 RxKotlin 的 'observeOn' 主线程

gradle - 是否可以从同一个子项目并行运行两个独立的 gradle 任务?

Gradle Maven 发布到 nexus delombok 源代码

android - MediaStore.Images.Thumbnails.getThumbnail 中的原始 ID 是什么?

android - 均匀占用空间的三元素LinearLayout

java - 如何在android库中包含内部jar文件