【问题标题】:Android difference between Module vs Flavor模块与风味之间的Android区别
【发布时间】:2017-12-11 09:30:53
【问题描述】:

android 模块和风味之间的主要区别是什么?

来自模块定义https://developer.android.com/studio/projects/add-app-module.html

模块为您应用的源代码、资源文件和应用级设置(例如模块级构建文件和 Android 清单文件)提供了一个容器。每个模块都可以独立构建、测试和调试。

但我可以对口味说同样的话。

有人能指出这两者之间的主要区别吗?

【问题讨论】:

    标签: android android-productflavors android-module


    【解决方案1】:

    模块是项目的一部分,而风味或多或少是配置/实现

    模块的具体示例: 如果你正在制作一个库,你可以有几个模块,例如库本身和一个演示项目。它们每个都是模块

    注意:每个模块都有自己的代码

    风味的具体示例: 您正在制作具有一些在线功能的应用程序。为此,您有几个环境(在服务器环境上用于测试,一个用于实时版本)。 您可以使用自己的配置(如果需要,还可以使用自己的实现)为每个环境制作构建风格

    注意:风味可以共享他们的代码(使用主文件夹)

    这只是一个简短的结论。模块和风味比这个简短的描述要强大得多,但我认为它会指出最重要的区别

    编辑:主要区别在于您的项目结构,尤其是关于 gradle。

    模块总是有自己的 gradle 文件,所以你会得到以下结构:

    projectName.gradle
        module1.gradle
        module2.gradle
        ...
    

    flavors 在模块的 gradle 文件中定义:

    例如module1.gradle 可能如下所示:

    // some other gradle stuff before
    
    buildTypes {
        dev {
            // your config
        }
        debug {
            // your config
        }
        release {
            // your config
        }
    }
    

    如您所见,您可以混合风格和模块。因此,现在您将在 module1 中拥有一个包含 2 个模块和不同风格的项目。

    在您的项目文件夹中,您的文件资源管理器中应该具有以下结构:

    /project
      /module1
        /src
          /main
          /dev
          /debug
          /release
      /module2
    

    【讨论】:

    • 我没有询问具体示例,但我询问了关键差异。如果我创建 app/src/flavorName 目录,它将与模块​​位于同一“项目级别的一部分”。
    • 我只是为了让差异更清楚而做了这个例子。那么你还有什么问题呢?
    • 风味和模块的表现方式只是您在帖子中提出的有效观点。这是不同的,但我不会称这两者之间的 KEY 不同。我可以用一个做,但不能用另一个做的功能是什么?
    • 我无法想象需要模块或风味的场景。我认为在大多数情况下,您几乎可以使用风味或模块来实现所有东西(当然在某些情况下风味或模块将不起作用,但我目前无法想象一些)。更有趣的一点是什么时候应该使用风格,什么时候应该使用模块来保持项目的简洁
    • 有用的讨论。你提到,风味可以共享他们的代码(使用主文件夹)我的观点:即使模块也可以与主模块/项目共享代码(使用主文件夹)
    【解决方案2】:

    模块是完全不同的文件集。 Flavors 可以共享大部分代码或配置,并且只有很小的差异。

    【讨论】:

    • 这些细微差别是什么。 ?
    • 我可以将flavor定义为app/src/flavorName,这也是完全不同的代码集。模块也可以共享代码,但我想这不是一个好习惯。风味之间的差异取决于我的实现。
    • 是的,但你不能做相反的事情——制作模块来共享代码。这两个实体只是为了在不同的情况下使用,但如果你愿意,你可以用它们做类似的事情。
    • @MayurAgarwal 这取决于您的配置您可以更改 gradle 属性,如 applicationId 等。或者提供完全不同的来源,如上面提到的 TomášHavlíček
    • @PavelKuznetsov 我可以添加另一个模块作为原始模块的依赖项吗?我可以让 BaseModule 在其他模块之间共享代码。
    猜你喜欢
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2013-03-27
    • 2014-02-23
    • 2011-10-08
    相关资源
    最近更新 更多