【问题标题】:Good Practice Gradle Flavors With Class课堂上的良好实践 Gradle 风味
【发布时间】:2015-10-07 08:12:18
【问题描述】:

我正在寻找有关如何使用 gradle 风格来定义我的 Android 应用程序行为的信息。

假设我想在我的 flavor1 中开始一项新活动,而不是在 我的味道2。

由于 gradle 不会相互覆盖类,

我必须,在每种口味中定义 Activity

app/src/
     |-> flavor1/java/<package>/Activity.java
     |-> flavor2/java/<package>/Activity.java
     |-> main/java/<package>

或者,在我的主文件夹中定义它并在一个常量类中使用一个枚举,如果我在我的风味 1 或我的风味 2 中,它会返回

app/src/
     |-> flavor1/java/<package>/Constant.java
     |-> flavor2/java/<package>/Constant.java
     |-> main/java/<package>/Activity.java

我的猜测是我必须混合使用两种解决方案:

  • 如果我想在flavor1 中创建一个独特的活动,我必须在flavor2 中创建同样的类,也许只是throw RuntimeException("stub!")
  • 如果我想从main 调用这个活动,我必须使用if (Constant.getFlavor() == flavor1) 之类的东西

在我看来,这是使用 gradle 风味最酷的方式。但我想确定,到目前为止,没有其他最好的方法可以在最终实施之前处理它。

有没有人写博客或者想发表自己的看法?我很想读你!

提前致谢!

【问题讨论】:

    标签: java android gradle android-gradle-plugin android-productflavors


    【解决方案1】:

    您可以在每种风味上放置不同的 AndroidManifest 文件。例如,您可以在flavor1 中定义(我们称之为)可选Activity,在flavor1 中扩展可选Activity 的类,您就完成了!请注意,风味 AndroidManifest 文件必须仅指定与主 AndroidManifest 不同的内容:在这种情况下,您应该只包含 &lt;activity/&gt;(当然在空的 &lt;application/&gt; 中)

    【讨论】:

    • 关于如何检查是否可以调用您的Activity,可以,您可以检查风味名称(我建议使用BuildConfig.FLAVOR 常量),也可以使用PackageManager.getPackageInfo() 传递应用程序的包名称以检索活动列表。有了列表后,您就可以了解该 Activity 是否存在。
    • 感谢您的回答。您不是要在 main 中定义可选的 Activity 并在 flavor1 中扩展它吗?如果没有,我不明白。
    • 没有。在你需要的地方定义可选的活动。在这种情况下,您必须提供一个 AndroidManifest 来声明可选的 Activity,它将通过“清单合并”为您合并。
    • 好的,但是在我的 MainActivity 中,如果我构建 flavor2,我的 Flavor1 类的调用行将返回错误。即使它不在清单中
    • 是的,这就是为什么我建议使用 2 种方法来检查您的口味。第一个:使用 BuildConfig.FLAVOR。它是由构建系统创建的常量。第二个:使用PackageManager.getPackageInfo() 检查您的应用程序的活动。如果有可选的 Activity,您可以启动它。但关键是:如果你在 flavor2 中你会做什么?您不应该让用户有可能做该风味无法处理的事情。你同意吗?
    【解决方案2】:

    如果您想避免if (Constant.getFlavor() == flavor1),您可以创建一个工厂类,然后返回该风味活动的正确意图。然后在每种口味中覆盖它。这样可以避免 if 语句污染代码。

    【讨论】:

    • 感谢您的建议
    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多