(Android)具有不同风格的运行时依赖关系管理

时间:2015-01-23 14:14:08

标签: java android gradle dependencies dependency-management

我有一个Android应用程序。

我想定义一下我的应用程序的味道。这种味道将不包括(出于法律原因)我的主要味道中的一些依赖。 Gradle不仅可以做到这一点,而且似乎是(more or less) the main reason Google adopted Gradle for Android in the first place

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

import package.which.is.only.available.sometimes.

当我尝试调用它的方法时,如何测试包的存在?我想我可以使用它并捕获任何CallNotFundExceptions,但这似乎是一个主要的黑客攻击。

任何输入将不胜感激:)

1 个答案:

答案 0 :(得分:2)

  

这种味道不会包括(出于法律原因)我主要口味中的一些依赖。

我不知道您可以通过味道轻松排除依赖关系。您可以使用flavornameCompile(其中flavorname是您的风味名称)按风格添加依赖项。

  

这将如何影响我拥有的所有地方:import package.which.is.only.available.sometimes

如果它在您的main源集中,您的代码将无法编译,因为类将不存在。

  

当我尝试调用它的方法时,如何测试包的存在?我想我可以使用它并捕获任何CallNotFundExceptions,但这似乎是一个主要的黑客攻击。

将代码移动到单独的风格中。您的main源集将包含与两个分发方案完全相同的代码,而不引用条件依赖项。一种风格将包含依赖项和使用它们的代码;另一种味道不会。

例如,假设您的两个分发方案是Play商店并从您的网站直接下载,条件相关性是来自Play服务框架的应用内购买(IAP)内容。您将拥有带有依赖项(google)的googleCompile风格,其源集将使用IAP API。您将有一个单独的standard风格,可以做其他事情(例如,使用PayPal)。 main源集,只要需要执行与应用内购买相关的操作,就会委托给InAppPurchaseStrategy类。该类将有两个单独的实现,每个风格一个(main本身没有),调整为使用适合该风格的支付内容。