Java (Android)不同风格的运行时依赖项管理

Java (Android)不同风格的运行时依赖项管理,java,android,gradle,dependencies,dependency-management,Java,Android,Gradle,Dependencies,Dependency Management,我有一个Android应用程序 我想定义我的应用程序的风格。由于法律原因,这个风格将不包括我的主要风格中的一些依赖项。格拉德尔不仅能做到这一点,而且看起来确实如此 然而,我不明白的是如何在运行时处理这些缺失的依赖项。这将如何影响我所有的地方: import package.which.is.only.available.sometimes. 当我尝试调用包的方法时,如何测试包的存在性?我想我可以用它来捕捉任何异常,但这似乎是一个重大的黑客 如有任何意见,将不胜感激:) 由于法律原因,这个风格将

我有一个Android应用程序

我想定义我的应用程序的风格。由于法律原因,这个风格将不包括我的主要风格中的一些依赖项。格拉德尔不仅能做到这一点,而且看起来确实如此

然而,我不明白的是如何在运行时处理这些缺失的依赖项。这将如何影响我所有的地方:

import package.which.is.only.available.sometimes.
当我尝试调用包的方法时,如何测试包的存在性?我想我可以用它来捕捉任何异常,但这似乎是一个重大的黑客

如有任何意见,将不胜感激:)

由于法律原因,这个风格将不包括我的主要风格中的一些依赖项

我不知道你能轻易地根据口味排除依赖性。您可以使用
flavornameCompile
(其中
flavorname
是您的风味名称)按风味添加依赖项

这将如何影响我所有的位置:
import package.which.is.only.available.有时

如果在
main
sourceset中,代码将无法编译,因为类将不存在

当我尝试调用包的方法时,如何测试包的存在性?我想我可以用它来捕捉任何异常,但这似乎是一个重大的黑客

将代码移到单独的风格中。您的
main
sourceset将包含与这两种分发场景真正相同的代码,而不引用条件依赖项。一种风格将包含依赖项和使用它们的代码;另一种味道就不行了


例如,假设您的两个分发场景是Play Store和从Web站点直接下载,条件依赖性是Play Services框架中的应用内购买(IAP)内容。您将拥有一个带有依赖项(
googleCompile
)的
google
风格,其源代码集将使用iapapi。您将拥有一个独立的
标准
风格,可以做其他事情(例如,使用PayPal)。
main
sourceset每当需要执行与应用内购买相关的操作时,都会委托给
InAppPurchaseStrategy
类。该类将有两个独立的实现,每种风格一个(在
main
本身中没有),调整为使用适合该风格的支付工具。

好的-我理解。我希望能有一个更优雅(神奇)的解决方案来解决我的问题,但至少你的建议有效。