问题标签 [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 投票
2 回答
113 浏览

android - 如何根据构建类型和构建风格管理配置

在我的应用程序中,我有 2 种构建类型releasedebug下面是代码片段。

我还有 2 种产品风格,下面是代码片段。

现在我总共有 4 种产品类型

  • 风味1调试
  • 风味1释放
  • 风味2调试
  • 风味2释放

现在我需要创建一个变量 app_name,以便不同产品类型的应用名称可以不同。

  • flavor1debug ---------> app_name : flavor1 (debug)
  • flavor1release ---------> app_name : flavor1
  • flavor2debug ---------> app_name : flavor2 (debug)
  • flavor2release ---------> app_name : flavor2

如何使用配置或 strings.xml 实现相同的目标

编辑:假设,我正在使用第三方库并且我想使用不同的身份验证密钥,如何使用Flavor&buildType组合来实现这一点?

即我需要基于以下配置的 4 个不同的键

  1. Flavor1 + 调试 ========= Key1
  2. 风味1 + 释放========= Key2
  3. Flavor2 + 调试 =========== Key3
  4. 风味2 + 释放========== Key4

任何帮助,将不胜感激。

0 投票
1 回答
7347 浏览

android - 无法在以下项目变体之间进行选择:features:myDynamicFeatureModule:

我正在我正在从事的项目中尝试使用 Android 的动态功能模块(又名按需模块)。

在我的 PoC(概念验证)项目中,动态功能模块 (DFM) 可以正常工作,并且 gradle 可以毫无问题地构建项目。在完成我的 PoC 后,我决定将其应用到现有项目中。但是,gradle 未能通过以下方式构建项目:

请注意,这个错误很长,会遍历所有可能的风格。

我尝试过但没有奏效的方法:

  • 我在动态模块中添加了与基本模块(my-app)完全相同的风格
  • 在我的 DFM 的 build.gradle 中,我尝试明确设置配置,例如:implementation project(path: ':my-app', configuration: 'default')以及配置:'someFlavor'
  • 在我使用的基本模块(my-app)的 build.gradle 中missingDimensionStrategy 'mydimension', 'myflavor'
  • 从 Android Studio 和终端构建
  • 从 build.gradle 文件中删除依赖项和其他代码

我已经尝试过并且有效:

  • 从 DFM 中删除基本应用程序 (my-app) 的依赖项(即删除 implementation project(':my-app',) ) - 但我需要它。澄清一下,DFM 应用了以下 gradle 插件:com.android.dynamic-featurekotlin-android
  • 从基本应用程序和 DFM 中删除所有风味 - 但我需要在基本应用程序中使用它们。
  • 我制作的 PoC 工作正常,即使使用与我在实际项目中使用的相同风格,gradle 也能编译项目

笔记:

  • 我使用 DexGuard(但我禁用了它以确保它不会干扰)
  • 我没有任何自定义构建类型,只有“调试”和“发布”
  • Gradle 版本是 3.5.2
  • Gradle 包装器是 5.5.1
  • PoC 和我的实际项目都使用相同版本的 gradle、gradle 包装器、构建类型和风格

不幸的是,我无法在单独的项目中重现该问题。我尝试从我的项目中删除尽可能多的东西,但我无法解决这个问题。

您是否知道可能导致此问题的原因以及我该如何解决?谢谢!

0 投票
0 回答
108 浏览

android - 自动化 android 多风格应用程序构建生成

我想自动化我的应用程序的构建生成[apk/aab],假设我至少有 10 种风格,它有多种风格。由于进行调试构建或发布构建是耗时的过程,我想通过从文件中读取 DEBUG/RELEASE 配置来自动化或在 Gradle 文件中编写构建脚本。请指导我在 Gradle 文件中创建构建脚本。

0 投票
1 回答
204 浏览

android - 确定 Android 中其他模块的 buildType

我的模块有 2 个buildTypeapp名为releaseand debug

该模块依赖于其他一些模块,例如lib1.

当我想组装一个 apk 时,我应该运行:

在 和 中的两个build.gradle文件中applib1我定义了buildTyle{ ... }section 和 set minifyEnabled true

但是当我分析签名 apk 的release类型时,似乎 gradle 并没有缩小和缩小未使用的资源。

如何确定应该为我为app模块选择的 buildType 使用哪个 buildType?(当我运行上面的命令时)

0 投票
0 回答
170 浏览

android - 尝试连接到 React Native 打包器的 Android Staging 构建风格

我介绍了两种产品风格和一种新的构建类型。

但是,当我运行 Staging 变体时,它仍会尝试连接到 React Native Metro 捆绑器。我希望 Staging 采用与 Release 构建类型相同的步骤。

我正在通过 CircleCI 通过运行来构建它./gradlew assembleStagedFlavorStaging。apk 构建良好,但是当我在我的设备上运行它时,我得到以下信息

在此处输入图像描述

由于启用了可调试,我能够看到这一点。没有这条线,应用程序就会崩溃。

0 投票
1 回答
78 浏览

android - 如何使用“R.id object = new R.id();” 使用构建工具 3.6.0?

我必须为不同的构建风格使用不同的布局,其中一种风格中存在另一种风格中不存在的 ui 元素。

之前我只是将元素设置为不可见/消失,但现在我有一个 NestedScrollView,其中包含一个包含 RecyclerView 的子片段。孩子需要一种口味的纽扣,而另一种口味则不能。如果我只是将其设置为不可见或消失,则布局无法正常工作(不滚动且高度太低)。

我将布局 xml 复制到风味的路径并删除了按钮并在片段代码中使用反射来了解按钮是否存在并实现它的代码。

从 3.5.3 更新到 Gradle 构建工具到 3.6.0 后,我得到

错误:id() 在 id R.id object = new R.id() 中具有私有访问权限;

为线

尝试构建时。目前我只是继续使用旧的构建工具,但这不是永久的解决方案,我认为。

我可以做点别的吗?我想摆脱反射,但如果它真的是唯一的方法,它应该使用最新的构建工具......

0 投票
2 回答
155 浏览

android - 你如何结合多种 gradle 口味或排除一种?

这会生成构建变体:blueDebug、blueRelease、redDebug、redRelease

但除了这些之外,我还想要一个组合这两者的构建变体,所以最终列表将是:blueDebug、blueRelease、redDebug、redRelease、blueRedDebug、blueRedRelease

如果你有不同的风味维度,你最终只会得到蓝红组合。

我如何设置我的 gradle 脚本来支持这种情况?最终目标是能够选择是否只需要红色库、只需要蓝色库或两者的组合。

0 投票
0 回答
56 浏览

android - 安卓短信验证API

我已经开发了具有多种构建风格的应用程序,例如 dev、test、prod,所以当我使用短信验证 api 时,我只能在 prod 模式下读取短信,但不能在其他模式下读取,我已经验证了正在发送到的哈希服务器因不同的构建风格而异,服务器也在应用程序发送的短信中发送相同的哈希,但问题是短信验证 api 接收器能够读取产品构建风格的短信,而不是其他构建味道。

构建风味代码

生成哈希的代码

任何建议或帮助都会很棒。

0 投票
0 回答
240 浏览

gradle - 在一次 Sonarquebe 分析中涵盖所有 gradle 风味

是否可以对所有口味进行一次声纳分析?我有一个多风格的 Android 项目,我在不同风格的文件夹中有一些文件的不同实现。这些文件在风味测试文件夹中有相应的测试。因此,在示例中,我的 src 结构是:

现在我可以使用sonarqube.androidVariant了,但这一次只能配置一个变体,所以如果我想检查第二种风格的分析,我需要使用不同的设置再次运行任务,这在 Gitlab CI 中无法显示多个分析。在运行声纳之前,我能够配置单独的 jacoco 任务以生成所有风格的覆盖率报告。然后我尝试将源目录添加到 sonarplugin,如下所示:

不幸的是,这最终会出现错误:

有没有办法在一次声纳分析中覆盖所有类型的测试覆盖?正如我之前写的那样,我无法对每种风格进行单独分析,因为 Gitlab CI 无法在合并请求中显示多个声纳结果。

0 投票
0 回答
181 浏览

android - 特定维度和构建类型的 Gradle 依赖项

我有一个具有多种风味维度的应用程序:

  • 版本(演示/免费/付费/vip)
  • 环境(测试/验收/生产)

和通常的构建类型:debugrelease

这会产生一个完整的构建变体列表:

  • 演示测试发布
  • 演示测试调试
  • 免费测试发布
  • 免费测试调试
  • 付费测试发布
  • 付费测试调试
  • vipTestRelease
  • vipTestDebug
  • 对于其他环境,依此类推。

然后我可以为这样的构建变体设置特定的依赖项。

但这并不理想,因为我必须写下每一个组合并最终得到数十种配置。

有没有办法为 buildType 和特定维度定义依赖关系?在我的情况下,环境维度?像这样:

我尝试使用 avariantFilter但是它只是迭代每个构建变体,所以我最终得到了重复的依赖项。我该如何解决这个问题?