我正在开发一个Android库,它基本上是我编写的一些REST服务的客户端.我有几个存储类,网络队列,解析器等,并且像许多这样的类一样,它们依赖于Context或者SharedPreferences构建自的东西Context.这些对象都隐藏在facade类后面,因此我的库的使用者看不到它们或直接与它们交互.
为了我自己的理智,我想使用Dagger 2进行依赖注入,以便在我的库中管理这些类的实例.但是,我不想强迫使用我的库的应用程序自己使用Dagger; 仅仅因为我选择使用Dagger并不意味着我的用户应该这样做.
我见过的所有教程似乎都期望我正在构建一个应用程序,而不仅仅是一个库.这些教程中的许多都告诉我应该让我的Application类继承自己DaggerApplication.但就我而言,我的库中根本没有Application(或任何Activity或Service`类),我不希望我的用户必须使用Dagger的基类.
那么我如何才能使用Dagger而不将其"泄漏"出我的库?我在这里找到了部分答案,但我不确定如何调整作者的"包装"模式来处理我对它的依赖Service.我可以将上下文传递给包装器的Context方法,还是Dagger能够以其他方式获取Context引用?
我有项目A,曾经有模块A1,使用dagger v.1.2.2.现在我想添加项目A,模块A2,它依赖于dagger v.2.0.但我不能因为这两个匕首库存冲突.我可以在不同的Android模块中以某种方式处理多个版本的库吗?
我想将 dagger 库用于 android 库项目。我还研究了 如何在 android 库项目中使用 dagger,但没有得到正确的实现。有人有演示或对此有任何想法吗?我还希望这些库类在项目中扩展以进行一些更改。
我在 Android Studio 项目的 Java 库模块中使用 Dagger,该build.gradle模块的外观如下:
apply plugin: 'java-library'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.google.dagger:dagger:2.24'
annotationProcessor 'com.google.dagger:dagger-compiler:2.24'
}
sourceCompatibility = "7"
targetCompatibility = "7"
Run Code Online (Sandbox Code Playgroud)
我可以看到 Dagger 正在正确生成实现,并且它们存在于build/generated/sources/annotationProcessor但由于某种原因我无法在代码中访问它们。package此外,生成的文件在语句中显示错误:
包名称“com.example.javamodule”与文件路径“java.main.com.example.javamodule”不对应
我在这里有两个问题。首先,如何在 java 模块代码中访问 Dagger 生成的类,其次,如何从生成的类中删除上述错误?