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

标签 java android gradle dependencies dependency-management

我有一个 Android 应用程序。

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

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

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

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

任何意见都将受到赞赏:)

最佳答案

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

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

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

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

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) 内容。您将拥有带有依赖项 (googleCompile) 的 google 风格,并且其源集将使用 IAP API。您将有一个单独的标准风格来执行其他操作(例如,使用PayPal)。 main 源集,每当需要执行与应用内购买相关的操作时,就会委托(delegate)给 InAppPurchaseStrategy 类。该类将有两个单独的实现,每种风格都有一个实现(main 本身没有),调整为使用适合该风格的支付内容。

关于java - (Android) 不同风格的运行时依赖管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28111815/

相关文章:

java - 在 listFragment 中实现 OnScrollListener

android - 无法使用动态 attr drawable 膨胀 View

Gradle - 有条件地添加配置

java - Java 中整数数组的排序和比较

java - 有符号整数到无符号字节,反之亦然

android - 将 Google 项目迁移到 Firebase 控制台

gradle - gradle.processResources 中的代码块取决于是否请求了另一个任务

gradle - 如何将 JHipster 生成的项目拆分为多模块 gradle 项目

Java 未定义的泛型类型

java - 迭代时向 ConcurrentSkipListSet 删除和添加元素