我正试图在我的Android应用中实施新的即时应用功能。我有4个模块:
base
push
installed
instant
由于Instant App不支持推送通知,因此我只想为已安装的应用启用push
模块。但我在base
中共享了调用push
方法的类。例如,我在应用程序类的应用程序启动期间初始化push
模块。
如何组织依赖关系,因此我不必将push
模块包含在base
模块中,但可以从push
调用base
方法?我知道我可以在PushManagerProvider
模块中创建接口base
,因此instant
和installed
可以提供自己的实现,但我不知道我怎么能根据当前模块,将具体实现注入base
。
答案 0 :(得分:2)
假设您使用匕首并在Application类中构建单例组件,这是一种方法。
在base
中,定义Injector
类扩展的@Component
接口。让您的应用程序在您的基础模块中实现一个InjectorProvider
接口,该接口具有一个返回构造组件的getInjector()
方法。该组件将使用提供无操作PushManagerProvider
的模块构建。
然后在您的push
模块中,创建Application
类的替代实现(扩展基础并重命名为PushAwareApplication
?)使用提供的模块创建组件在推送内置到您的应用程序模块中时,使用PushManagerProvider
并使用merge rules强制使用新的PushAwareApplication
名称。
这样你就可以打电话了
((InjectorProvider)getApplication()).getInjector().inject(this);
根据您是构建可安装应用程序还是即时应用程序,获得不同的组件实现。
使用匕首可能有更多正确的方法,但这应该让你开始。
如果您不使用匕首,则可以使用上述相同的应用程序覆盖技术,同时实现提供' getPushManagerProvider()方法的接口的应用程序实现。