即时应用:使用基本模块中的功能模块,没有强依赖性

时间:2017-05-30 06:41:55

标签: android android-instant-apps

我正试图在我的Android应用中实施新的即时应用功能。我有4个模块:

  • 包含所有活动和逻辑的基本要素模块:base
  • 具有推送通知类的功能模块:push
  • 已安装的应用模块:installed
  • 即时应用模块:instant

由于Instant App不支持推送通知,因此我只想为已安装的应用启用push模块。但我在base中共享了调用push方法的类。例如,我在应用程序类的应用程序启动期间初始化push模块。

如何组织依赖关系,因此我不必将push模块包含在base模块中,但可以从push调用base方法?我知道我可以在PushManagerProvider模块中创建接口base,因此instantinstalled可以提供自己的实现,但我不知道我怎么能根据当前模块,将具体实现注入base

1 个答案:

答案 0 :(得分:2)

假设您使用匕首并在Application类中构建单例组件,这是一种方法。

base中,定义Injector类扩展的@Component接口。让您的应用程序在您的基础模块中实现一个InjectorProvider接口,该接口具有一个返回构造组件的getInjector()方法。该组件将使用提供无操​​作PushManagerProvider的模块构建。

然后在您的push模块中,创建Application类的替代实现(扩展基础并重命名为PushAwareApplication?)使用提供的模块创建组件在推送内置到您的应用程序模块中时,使用PushManagerProvider并使用merge rules强制使用新的PushAwareApplication名称。

这样你就可以打电话了

((InjectorProvider)getApplication()).getInjector().inject(this);

根据您是构建可安装应用程序还是即时应用程序,获得不同的组件实现。

使用匕首可能有更多正确的方法,但这应该让你开始。

如果您不使用匕首,则可以使用上述相同的应用程序覆盖技术,同时实现提供' getPushManagerProvider()方法的接口的应用程序实现。