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

(Android) Runtime dependency managment with different flavors

我有一个 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,但这似乎是一个重大的 hack。

任何输入将不胜感激:)

This flavor will not include (for legal reasons) some of the dependencies in my main flavor.

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

How will this affect all the places I have: import package.which.is.only.available.sometimes

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

How do I test for the existence of the package when I try to call it's methods? I guess I could just use it and catch any CallNotFundExceptions, but that seems like a major hack.

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

例如,假设您的两个分发场景是 Play 商店和从您的网站直接下载,并且条件依赖是来自 Play 服务框架的应用内购买 (IAP) 内容。您将拥有 google 风格的依赖项 (googleCompile),并且其源集将使用 IAP API。你会有一个单独的 standard 风格来做其他事情(例如,使用 PayPal)。 main 源集,每当它需要做一些与应用程序内购买相关的事情时,就会委托给 InAppPurchaseStrategy class。 class 将有两个单独的实现,每个版本一个(none 在 main 本身),调整为使用适合该版本的支付方式。