引言:这不是一个关于如何在Android应用程序中使用构建类型和产品风格的问题。我了解其中的基本概念。这个问题更多的是试图理解应该在构建类型中指定哪个配置,应该在产品类型中指定哪个配置,以及是否确实有必要进行任何区分。
本周,我学习了更多关于Android应用的gradle配置。我最初认为我已经很好地处理了构建类型和产品风格,但随着文档的深入,我意识到两者之间的区别对我来说根本不清楚。
由于存在定义良好的层次结构(在构建类型中指定的属性优先于产品类型中指定的属性),我不理解为什么需要区分构建类型和产品类型。将所有属性和方法合并到产品风格DSL对象中,然后仅仅将构建类型作为(默认的)风格维度不是更好吗?
以下是一些让我困惑的具体例子:
signingConfig属性可以在构建类型和产品风格中设置…但是minifyEnabled(我假设还有shrinkResources?)只能在构建类型中配置。
applicationId只能在产品口味中指定…和applicationIdSuffix只能在构建类型中指定!?
实际问题:
对于上面的例子:构建类型和产品风格之间的角色是否有明确的区别?
如果是,最好的理解方式是什么?
如果不是,是否计划最终将构建类型和产品风格合并到一个可配置的DSL对象中?
Expanding on what @CommonsWare said in the comments, the basic idea is that build types are for different builds of your application that aren't functionally different -- if you have a debug and release version of your app, they're the same app, but one contains debugging code, maybe more logging, etc., and the other is streamlined and optimized and possibly obfuscated via ProGuard. With flavors, the intent is that the app is notably different in some way. The clearest example would be a free vs. a paid version of your app, but developers may also differentiate based on where it's being distributed (which could affect in-app billing API use).
有些开发者为不同的用户制作了许多不同版本的类似应用——例如,一个简单的应用在网页视图中打开一个网页,每个版本都有不同的url和品牌——这是一个很好的使用风格的例子。
重申一下,如果它是“相同的应用程序”,对一些对最终用户不重要的差异取模,特别是如果除了一个变体以外的所有变体都是为您自己的测试和开发使用,并且只有一个变体将部署给最终用户,那么它是构建类型的一个很好的候选者。如果它是一个“不同的”应用程序,并且将为用户部署多个变体,那么它可能是一个产品风格的候选。
您已经看到构建类型和风格之间存在一些功能差异,其中一些选项只支持其中一种,而不支持另一种。但是,尽管它们很相似,但它们的概念是不同的,而且没有计划将它们合并在一起。
让我们看一个真实的例子。
假设你有一个煮好的面条盘。如果你问厨师这个问题
它的构建类型是什么?
他/她会这样回答-
用半开的水
少放盐
在高压锅等。
这意味着他/她在描述他/她是如何做面条的。
它的生产风味是什么?
他/她会这样回答-
干酪
不咸的
更少的油
这意味着他/她正在描述构建之后的实际情况。
让我们来看看理论
构建类型:在Android应用程序中,构建类型通常指的是你运行应用程序的环境。每个模块默认情况下都必须调试和发布构建类型,但你可以根据需要定义更多的构建类型。如果你在科技公司工作过,你可能知道通常不止这两家。您可以自定义您的构建类型,以包括其他风格,如QA,发布候选或RC, Pre-Prod,或任何适合您的需求。
风格:除了基于环境的差异之外,应用程序通常也会有所不同。口味支持这种变化。例如,你可以使用口味来处理:
选择付费版本还是免费版本。
为你上传的每个商店(游戏邦注:如亚马逊Appstore、谷歌Play store和三星Galaxy store)提供相应版本。
为不同的产品使用相同的应用程序,并自定义资产以改变应用程序的外观和感觉。
构建变体:变体是构建类型和构建风格的组合。例如,你可以拥有应用的“开发付费”版本,这是应用的“开发”构建类型和“付费”风格的结合。如果你同时拥有这两种风格和类型,你可以在上传到谷歌Play Store或任何其他商店时发布变体。