问题标签 [android-productflavors]

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 回答
8423 浏览

android - 如何在 gradle 构建文件中的其他地方访问 buildConfigField

我正在尝试在我的 productFlavor 块中设置一个 buildConfigField,然后在我的 gradle 构建文件中的其他地方引用该字段,以便在为我的 apk 构造名称时可以使用该值。

例如

如何在 build.gradle 脚本的其他地方访问 APP_FLAVOR_NAME?

我也在努力弄清楚如何在构建脚本中引用风味名称本身作为构建 apk 名称的另一种选择。我该怎么做呢?

0 投票
1 回答
1591 浏览

android - 产品风味的本地化

我有 3 种产品风格,每种风格的调试和发布,每一种我都成功地赋予了每个独特的字符串和图标。现在我正在为本地化做准备,这需要为每种产品风味提供不同的字符串。这是我当前的文件夹/目录设置:

每个产品风格已经覆盖了默认的 strings.xml。现在我需要我的西班牙语和法语字符串来覆盖每种产品风味的默认字符串。这是我假设我的文件夹/目录设置需要的内容:

有人可以证实我的假设吗?然后我必须找到最简单的方法来测试它,而不会卡在手机上的外语上。

在此先感谢,德文

0 投票
2 回答
2823 浏览

android - 文件:///android_res/drawable 在使用带有其他包名的风味时不起作用

我的问题是,在我向我的项目添加风味之后,具有与实际源不同的包名称的风味似乎在访问 android_res/drawable.

更具体地说,我有一个调用以下图像的 html 视图。

该图像显示在产品风味中,其包名称与 java 文件的目录相同,但不适用于 beta 风味:

java文件的实际目录在哪里

发生这种情况很奇怪,因为资源甚至不在该文件夹中。

0 投票
3 回答
23695 浏览

android - Gradle:为库的特定风格添加依赖项

我有一个图书馆项目和一个应用程序。我想为库和应用程序提供 2 种产品风格( storedev )。当我为应用程序构建商店风格时,我想使用库中的商店风格。此外,当我为应用程序构建开发风格时,我想使用库中的开发风格。我尝试为库和应用程序设置相同的产品风格,但它不起作用。

这是我的配置:

图书馆

我有这个文件: src/main/res/values/strings.xml 和 src/store/res/values/strings.xml

应用

在这种情况下,我收到此错误:错误:(12、23)未找到与给定名称匹配的资源(在“文本”处,值为“@string/app_name”)。app_name在库的string.xml中定义(在目录和存储目录中)

如果我从它构建的库中删除 productFlavors 但始终使用主目录中的values.xml

0 投票
2 回答
1130 浏览

android - travis.ci 上的 Android 构建变体

我目前有一个使用 gradle 并与具有不同 productFlavors 和 buildTypes 的 travis.ci 集成的 Android 项目。然后在 travis.ci 上执行“connectedCheck”任务时,它会尝试打包所有构建变体(所有风格和类型的组合)。其中一些失败,因为发布版本需要密码输入,我目前无法自动化。有没有办法告诉 travis.ci 只构建和测试 Android 项目的某个构建变体?

0 投票
1 回答
1657 浏览

android - AndroidStudio:带有资产文件夹子集的风味

我有一个主要和三种风格的资产文件夹。他们每个人都只需要导入这些文件的一个子集。但是其中一些需要共享。

让我们举个例子。
我在 main 中的 assets 文件夹包含四个子文件夹: A、B、C、D
flavor1 必须包含资产 A、B、C
flavor2 必须包含资产 A、C、D
flavor3 必须包含资产 B、D

有没有办法为每种风味声明主资产文件夹的子集,避免在每个风味资产的文件夹中复制/粘贴每个所需的文件夹(从而避免复制)?

0 投票
1 回答
531 浏览

android - 风味与图书馆?

我刚看完Xavier Ducrohet关于 gradle 的演讲,我即将开始使用风味。我想了解它们比图书馆的最大优势是什么?

我知道 android 库可以有它自己的清单 / 资源,当然还有源,口味也是如此。但还有什么?我为什么要使用它们?

0 投票
1 回答
765 浏览

android - Android Gradle 产品风格在子库中失败

这个问题应该解决我需要更新子库内容提供程序的另一个问题:使用 Gradle 库中的构建类型来运行在一台设备上使用 ContentProvider 的相同应用程序

我在根应用程序中有一个产品风味,它成功地更改了包名称,因此我可以部署不同版本的应用程序。当我尝试在子库中添加相同的产品风味时,构建失败,因为根应用程序无法加载从子库引用的 java 类,因为现在包名称已更改?我认为产品风味不会影响 java 类包结构?

ATCApp.gradle 根应用程序

FYC.gradle 子库

在子 FYC 库中添加上述产品风味会导致根应用程序抛出错误:

/src/main/java/com/company/android/HomeBroadcastReceiver.java:7: com.company.android.fyc.controllers 包不存在 import com.company.android.fyc.controllers.FYCHomePagerActivity;

谢谢你的帮助!

0 投票
0 回答
235 浏览

android - 不同风味的 Gradle 构建类型自定义

我正在尝试为我的每个 gradle 风格指定构建类型。所以结构是

这是因为我有一些只适用于一种风格的功能,但是我需要能够为这些风格下的不同构建类型指定包名称后缀和签名配置(以及 flavor1-release 签名配置!= flavor2-发布签名配置。

这是行不通的。无论我选择哪种口味,似乎所有选项都已设置。

我不确定如何解决这个问题。我尝试使用 if 条件来测试当前正在运行的任务是针对 flavor1 还是 flavor2,然后设置构建类型值,但这也不起作用。

有些东西告诉我我正在尝试做一些不受支持的事情,并且需要重新考虑我的构建结构。但我想也许外面有人肯定知道。我查看了 Gradle 文档,但找不到我想要的东西。

任何帮助将不胜感激。

0 投票
1 回答
384 浏览

android - Android - 构建风味特定的代码和视图

我有一个地图集应用程序,它有一些特定的部分,具体取决于使用的地图集。让我们基本上将其描述为:

  • 一项显示地点的地图活动
  • 一个地点详细信息活动以显示地点详细信息

我正在使用风味来构建与每个图集对应的应用程序。例如:

  • 一餐厅风味
  • 一处观光地风味

每个图集都从不同的服务器 URL 获取数据,尽管 API 相同,但在处理地点详细信息时,返回的 JSON 具有一些特定部分:

  • 餐厅具有 JSON 属性,例如 opening_time、food_type、... 例如:

    { "name": "", lat: "", lon: "", "opening_time": "", "food_type": "" }

  • 观光网站具有 JSON 属性,例如 access_type、altitude、... 例如:

    { "name": "", lat: "", lon: "", "access_type": "", "altitude": "" }

我正在使用 Jackson 进行 JSON 解析并达到以下目的:

  • 我完成了所有常见属性的解析,并将它们显示在 details 活动中。
  • 相应的服务器被正确调用(在 Gradle 中将 URL 指定为 BuildConfig 常量)。

问题

我对构建风味非常陌生,我想知道哪种是处理风味特定代码(杰克逊解析和详细视图)的最佳方法。我的意思是最干净的代码重复尽可能少。

到目前为止我做了什么:

对于视图,我觉得我可以简单地合并一个布局 XML,它将被每个变体覆盖。这似乎可以解决问题。

对于java代码,我还是很迷茫。也许像

但是如何在不复制公共位置代码和解析注释的情况下获得特定于风味的详细信息实现呢?即:

  • 餐厅风味用途com.atlas.restaurant.Details
  • 观光风味用途com.atlas.sightseeing.Details

PS:我无法更改有关 API 和服务器代码的任何内容。