问题标签 [android-build-flavors]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
456 浏览

android - 使用 productFlavors 调试和发布包

productFlavorsbuild.gradle文件中创建了 2

和 2buildTypes debugrelease

所以 gradle 创建Build VariantsflavorADebug, flavorARelease,flavorBDebugflavorBRelease

我想在其中创建一个FlavorDI文件debug并进行release打包,这样debug/FlavorDI对于 and 将是通用的,并且对于and将flavorADebug是通用的。flavorBDebugrelease/FlavorDIflavorAReleaseflavorBRelease

但是当我包含FlavorDIAppComponent包中时无法识别。

我究竟应该如何创建一个对变体通用的文件FlavorDI,并且对变体是通用的?debug/FlavorDIflavorADebugflavorBDebugrelease/FlavorDIflavorAReleaseflavorBRelease

在此处输入图像描述

0 投票
1 回答
3264 浏览

android-studio - Android Studio 构建变体问题

我很难让 Android Studio 构建正确的构建变体——有时甚至让我根本无法选择构建变体。

基本上,我的项目有两个不同版本,一个是免费版本,一个是“完整”版本。包 ID 是“com.mycompany.myproj”和“com.mycompany.myprojfree”。

一旦我指定了“myproj”和“myprojfree”风格以及“release”和“debug”构建类型,Android Studio 会在列表中生成四个变体:myprojDebug、myprojfreeDebug、myprojfreeRelease 和 myprojRelease。

问题是,选择其中之一并不能可靠地选择用于构建、调试等的变体。例如,我将选择 myprojDebug,点击 Debug,然后 myprojfreeDebug 将构建(可以在控制台中看到),而免费的版本将在连接的设备上打开。

此外,有时我什至无法在构建变体窗格中选择一个或多个构建变体。我可以点击它,但它不会改变。但有时如果我先将其更改为其他内容,它会让我返回并更改未更改的内容。

我看到帖子提到了类似的问题,并遵循了所有建议——清理、重建、删除 .idea、删除构建文件夹、使缓存/重新启动无效、删除 app.iml 等——都无济于事。

值得注意的是,直到昨天我从 Android Studio 3.1 更新到 3.4.1 之前,所有这些都运行良好。

这是我的应用程序 build.gradle 的简化版本:

0 投票
1 回答
239 浏览

android - 如何以灵活的方式使用 Android Flavors 覆盖 Java/Kotlin 类?

我正在开发一个使用Flavors. 我的项目中目前有 4 种口味,但很快就会有 6-7 种口味。假设我有 4 种口味,f1、f2、f3 和 f4。

我非常熟悉 main/ 中的 Android 资源被风格中的资源覆盖,但类不是(参见“重复类”编译错误)。因此,如果我MyClass在 main/ 中,并且只想在f3中更改此类,我知道有一些解决方案:

  • 从 main/ 中删除 MyClass 并将其放入所有口味中,然后在 f3/MyClass 中进行修改。这将导致维护地狱,我不想那样做。
  • 在 main/aAbstractMyClass中拥有与 MyClass 相同的内容,在 f1、f2、f4 中用空的 MyClass 继承它并在 f3 中继承它并进行修改。同样,我不喜欢这个解决方案,因为它使班级人数增长得非常快,这破坏了项目的可读性。实际上,我目前使用的项目使用了这个解决方案,因为项目很大,所以这是一场噩梦。

我通过这篇漂亮的帖子找到了另一个解决方案:https ://stackoverflow.com/a/30548238/8096984 。

这篇文章描述了 f1、f2 和 f4 将具有指向包含 MyClass 的公共附加源集的链接(因此 MyClass 将不再位于 main/ 中),而 f3 将没有它。因此,它可以自由定义自己的 MyClass 实现,而不会出现重复类错误。

这个解决方案似乎是 3 个中最好的,但要覆盖 1 个。如果现在我有一个 MyClass2 我只希望在 f2 中有所不同怎么办?如果我将 MyClass2 放在额外的 sourceSet 中,那么我将不得不将 f3 链接到 sourceSet 并因此中断我因为重复类错误而执行的第一个覆盖。

我必须创建另一个源集吗?如果我这样做了,那么我真的不喜欢这个解决方案,因为你可以想象我在一个使用 6-7 种风格的大项目中必须创建的 sourceSet 的数量......

我应该怎么办?

0 投票
3 回答
831 浏览

android - 使用动态功能和构建风味时出现合并错误

使用 dynamic-feature-modules 可以定义AndroidManifest.xml模块是否应该预先安装:

或不:

我的项目中有两种构建风格。该模块应该预装在一种风格中,而不是另一种风格中。

这个想法是AndroidManifest.xmlmain源集中有这个默认值:

对于应该预先安装模块的构建风格 - 我创建了一个AndroidManifest.xml文件,将该dist:onDemand属性覆盖为false

不幸的是,这不起作用。清单合并失败并出现以下错误:

合并错误:错误:工具:在第 11 行为属性 dist:onDemand 指定了替换,但没有指定新值商店清单,第 10 行错误:验证失败,正在退出商店清单。

有谁知道这里有什么问题?

0 投票
1 回答
400 浏览

android - 如何为特定的构建风格设置 cpp 文件夹

我在 android studio 中将文件cpp夹和CMakelist.txt文件添加到特定风格时遇到问题。

我正在开发三个具有独特数据库结构的独立应用程序,因此我尝试使用构建风格和其他相关设置将这三个应用程序作为一个应用程序。

对于前两个应用程序,它做得很好,但对于最后一个应用程序,我遇到了一个问题,我不知道如何使用 Gradle 将cpp文件夹和CMakelist.txt文件添加到特定风格。您可能已经猜到了,最后一个应用程序是基于 NDK 的,它使用一个CMakelist.txt文件,并且有一个与 JNI 一起使用的活动。

relativeProjectPath在 gradle 中使用一种方法,并期望CMakelist.txt与我的cpp文件夹链接,但没有任何反应。

0 投票
2 回答
4671 浏览

flutter - 尝试使用风味时 Flutter 应用程序构建失败

我正在尝试在我的应用程序中使用 Flavors。我遵循了各种指南,但每次都无法构建相同的问题。(因为基本上每个博客文章和 SE 问题都引用了相同的文章和资源,我不会再这样做了)

为了调试,我决定简化问题并开始一个新项目(普通示例项目),并添加每个风味只有一个元素的风味:应用程序。这行得通。其他各种更复杂的属性,例如使用 res/values/strings.xml 作为应用程序标签也可以正常工作。

然后,我使用我的应用程序尝试了最简单的风味设置,使用如下所示的grade.build,然后立即失败并出现相同的错误。

注意:我还使用单独的入口点来实现运行时配置。这按预期工作,并且已经使用了一段时间。

当启动不包含任何自定义属性(通过flutter run --flavor dev -t lib/main-dev.dart)的“开发”风格时,它会构建并运行。

使用 --verbose 运行的有趣部分如下

请注意,如果我从“qa”风格中删除 applicationID,它就会构建。此外,当我将 applicationId 添加到 dev 风格时,同样的问题出现了,正如我所说,标准颤振示例项目不存在这个问题(事实上,简单项目的测试结果允许我设置字符串资源和每种口味的启动器图标成功)

0 投票
1 回答
82 浏览

android - 对于不同的应用程序模块,我可以在库模块中有不同的类(使用风味)吗?

我有两个应用程序:Application Module AApplication Module B。他们都使用库模块 X

库模块 X中,根据使用库的应用程序,我有一些不同的行为。我认为有三种选择可以实现这一目标。

硬编码提及应用程序。someClass将由应用程序注入或仅检查包。(我认为最糟糕的一个):

硬编码提及将要完成的事情。someClass将由应用程序注入。(我也不太喜欢):

3º 使用香精。我将为 Application Module A 定义风味A 为Application Module B定义风味B。在Library Module X中,我将定义这两种风格。所以我会将自定义代码放在一些特定的类中,这些类对每种风格都有不同的版本。

在任何地方,我只看到风味被用于单个应用程序。这是对它的正确使用吗?

0 投票
2 回答
214 浏览

android - 父样式取决于构建变体

我在themes.xml.

这两个主题通过 productFlavors 应用在清单中:

构建.gradle

清单.xml

这可以正常工作,具体取决于选择的构建变体,应用不同的主题。

现在我想集成 Stripe SDK 女巫声明一个名为StripeDefaultTheme的样式。

在这种风格中,我想用我自己主题的值覆盖colorPrimaryand 。colorAccent

是否可以将父级声明为由 Build Variant 确定的样式?

0 投票
1 回答
337 浏览

android - 用于仅测试依赖项的 Gradle 变体感知依赖项管理

我有一个多模块 Android 项目,其中包含一个仅用于测试的模块testImplementation project(path: 'libtestsupport')。除非我通过 为非测试构建包含此模块,否则自动变体切换似乎不起作用,implementation project(path: 'libtestsupport')我不想这样做,因为它只被测试使用。这导致此库模块的构建变体与其他模块不匹配:

构建变体不匹配

有没有办法让这个库依赖项像应用程序中的其他依赖项一样自动切换构建变体?

0 投票
0 回答
1221 浏览

android - 如何使用终端或命令提示符检查 Active Build Variant?

在我的项目中,我有三种风格的 build appDebugappReleaseappStaging.

现在,我想知道variant/flavor使用terminal/command prompt.

我想知道目前selected build variant使用的android studio terminal or command prompt.