android-studio - 是否可以隐藏位于 aar 中 'libs' 文件夹内的依赖项?

标签 android-studio gradle dagger-2 dagger gradle-shadow-plugin

为了给你我想要完成的内容,我将首先描述我的项目结构:

Application
|
| - Library Module
|   |
|   | - Core Library Module
|       | Module 1
|       |- Jar dependency 1
|       |
|       | Module 2
|       |- Jar dependency 2

创建的模块 1 和 2 包含由 shadow gradle 插件创建的 2 个 jar 文件,以重新定位 dagger 2 依赖项。这样做是因为应用程序使用 Dagger 1,并且它们不能在常规基础中同时使用。

核心库模块包含不同库的核心功能,这就是为什么它是一个单独的库,它还使用 dagger 2 进行依赖注入(inject)。

库模块包含我们为客户的应用程序提供的功能,它还使用 dagger 2 进行依赖注入(inject)。

现在真正的问题是应用程序,因为它使用 Dagger 1 进行依赖注入(inject)。因此,使用阴影 jar 可以在同一个项目中使用 dagger 1 和 2,因为 shadow 重命名并重新定位了 dagger 2 使用的所有类,例如 @Inject 到 @Inject2。

在库中,一切都按预期工作,因为我使用重定位和重命名的类,如 @Module2、@Inject2 等。

但是在我使用 dagger 1 的应用程序中,标签是 @Inject,@Module,通常在 dagger 1 中使用。因为在我的 build.gradle 中导入的依赖项是 Dagger1。但是当我构建应用程序时,我得到错误指示,我还必须添加修改后的 Dagger 2 标签,如@Module2、@Inject2。这正是我不想要的。

有没有办法使用 gradle 隐藏或忽略这些依赖项,这样应用程序就看不到 dagger 2 的修改后的 jar,但它们仍然可以在库中使用?

到目前为止,我唯一的解决方案是从库中删除 Dagger 2 并自己实现依赖注入(inject),但这很耗时,而且不是我想要的

编辑:

完全错误:
Error:(25, 8) error: com.sample.model.ApplicationModule is listed as a module, but is not annotated with @Module2

编辑2:
  relocate 'javax.inject.Inject', 'javax.inject.Inject2'
  relocate 'javax.inject.Named', 'javax.inject.Named2'
  relocate 'javax.inject.Provider', 'javax.inject.Provider2'
  relocate 'javax.inject.Qualifier', 'javax.inject.Qualifier2'
  relocate 'javax.inject.Scope', 'javax.inject.Scope2'
  relocate 'javax.inject.Singleton', 'javax.inject.Singleton2'
  relocate 'dagger.Lazy', 'dagger.Lazy2'
  relocate 'dagger.MembersInjector', 'dagger.MembersInjector2'
  relocate 'dagger.Module', 'dagger.Module2'
  relocate 'dagger.Provides', 'dagger.Provides2'
  relocate 'dagger.Provides$Type', 'dagger.Provides$Type2'
  relocate 'dagger.internal', 'dagger.internal2'
  relocate 'dagger.producers', 'dagger.producers2'
  relocate 'dagger.Component', 'dagger.Component2'

最佳答案

ApplicationModule似乎是 Dagger 1模块。错误似乎来自 dagger 2。显然,dagger 2 注释处理器在未重命名的 @Component 上运行.您需要确保处理器仅在 dagger 2 组件上运行。

关于android-studio - 是否可以隐藏位于 aar 中 'libs' 文件夹内的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39329297/

相关文章:

android - 从gradle中的多个依赖项中排除同一组?

intellij-idea - Intellij gradle 项目同步需要很长时间

java - 我如何告诉 Dagger 2 要基于 X 实例化哪个实现?

android - 没有专用子组件的 fragment 注入(inject)

Android Studio - 如何压缩对齐 apk

java - Android 在使用 Retrofit 多部分上传图像时遇到问题?

dependencies - 在 Gradle 中跳过禁用任务的依赖执行?

android - Dagger2,同时提供不同API的Retrofit实例

android - 使用 Android 许可证服务器的奇怪错误

android - Android Studio似乎丢失了警告消息