问题标签 [android-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 投票
0 回答
43 浏览

android - Android 中不编译有味道的源代码

我的应用程序中有两种风格,结构如下:

这是我的应用程序:

使用不同的资源可以很好地工作,但是当我有一个新的源代码时,它就会变得混乱。如果我调试它,它会从主应用程序中的代码开始,然后转到加味的应用程序,但令人惊讶的是,它并没有像加味剂那样做......它仍然遵循主要来源。

我试图清理和重建。还删除了缓存。我在我的应用程序 gradle 中引入了 sourceSets,指向风味保存代码的文件夹。但没有一个有效!

我的结构或配置我的口味中缺少什么?

0 投票
1 回答
138 浏览

android - 库可以依赖并从另一个多风格库中读取资源吗?

使用:Android Studio 3.2.1 - Gradle 4.6

我有一个包含 3 个模块的应用程序: :app :lib1 (library) :lib2 (library) :app 依赖于 lib1 和 lib2 :lib 1 依赖于 lib2 lib2 是一个仅包含资源的模块(用于图像、字符串、颜色和:app 和 :lib1 引用的一般值,而不是 java 代码

我想给 :app 模块和 :lib2 模块添加相同的口味(为我的客户定制应用程序,为每个应用程序指定不同的包)。:lib1 没有味道

在添加口味之前,一切正常。我向 :app 模块和名为“client1”的 :lib2 模块添加了 1 种风味。我在 :lib2\src\client1 中添加了一个“client1”文件夹:lib2。

Gradle 编译为: :app-client1Debug :app-client1Release :lib1-Debug :lib1-Release :lib2-client1Debug :lib2-client1Release 创建了相关的构建变体

我运行调试构建变体并且应用程序已正确安装并成功从 :lib2 模块中的 client1 风格中获取正确的资源

现在,我在 :app 和 :lib2 模块中添加了第二种风格,即“client2”,并在“:lib2\src\client2”中添加了一个文件夹,用于存放第二个客户定制的风格资源。我在 :app 和 :lib1 的 gradle 文件中为库模块 :lib2 添加了 productFlavors 和配置以及相关依赖项

我希望 :app 和 :lib1 模块都采用正确版本的 :lib2 模块资源。我将 gradle 与构建变体同步: :app-client1Debug :lib1-Debug //Has no flavor :lib2-client1Debug

并且 gradle 同步过程以异常结束: :app:processClient1DebugResources FAILED FAILURE: Build failed with an exception。• 出了什么问题:任务':app:processClient1DebugResources'执行失败。Android 资源链接失败输出:/Users/davide/Documents/......./android/MyApp/app/build/intermediates/incremental/mergeClient1DebugResources /merged.dir/values/values.xml:2601:错误:找不到资源颜色/colorPrimary(又名 it.test.myapp.client1:color/colorPrimary)。</p>

以及链接其他资源的其他类似错误:lib1 应该从 :lib2 client1 风格中获取。

似乎:lib1 包无法读取这些资源如果我尝试从菜单“Build->Rebuild Project”进行重建,我会收到类似的错误:

:lib1:javaPreCompileDebug /Users/davide/Documents/...../android/MyApp/lib1/src/main/java/it/test/lib1/utils/Utils.java:183: 错误:找不到符号 textView。 setTextColor(MyApplication.getInstance().getResources().getColor(R.color.colorPrimaryDark)); ^ 符号:变量 colorPrimaryDark 位置:类颜色 .... ..... /Users/davide/Documents/......../android/MyApp/lib1/src/main/java/it/test/ lib1/utils/Utils.java:228:错误:找不到符号字符串 channelId = context.getString(R.string.default_notification_channel_id); ^ 符号:变量 default_notification_channel_id 位置:类字符串。. ....其他类似的错误。. . 注意:某些输入文件使用或覆盖已弃用的 API。注意:使用 -Xlint:deprecation 重新编译以获取详细信息。50 个错误:lib1:compileDebugJavaWithJavac FAILED FAILURE:构建失败并出现异常。• 出了什么问题:任务':lib1:compileDebugJavaWithJavac'执行失败。编译失败;有关详细信息,请参阅编译器错误输出。<br> • 尝试:使用--stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。* 获取更多帮助 https://help.gradle.org


如果我在 :app-client2Debug :lib1-Debug //Has no flavor :lib2-client2Debug 上选择构建变体

我对 client2 风格有相同的错误,并且 :lib1 无法读取这些资源。现在有人指出我正确的解决方案吗?一个库可以有依赖关系并从另一个 FLAVORED 库中读取资源吗?我读了这个 https://android.jlelse.eu/product-flavors-for-android-library-d3b2d240fca2 和这个 https://proandroiddev.com/advanced-android-flavors-part-1-building-white-label- apps-on-android-ade16af23bcf 和这个从非风味应用程序引用的 Android 多风味库 - AAPT:未找到资源 和其他...虽然我是对的...但是....不起作用

//更新如果我从 :lib2 gradle 文件中删除了风味,并从 :app 和 :lib1 中删除了它的依赖风味配置,但保留了具有两种风味的 :app 模块,则应用程序运行并为 boh 变体安装,并且为此我安装了正确的 versionNameSuffix认为我在 :lib1 的配置中遗漏了一些东西,使其能够从 :lib2 的正确风格中读取资源。

有人可以帮忙吗?谢谢

0 投票
0 回答
149 浏览

android - 多维构建风格中的不同签名配置

小例子将描述这种情况:

任务: 我需要为fruitProductionfruitDevelopment风格保留不同的签名配置。

我研究了 gradle doc,但没有找到合适的任务,我可以覆盖配置以获得特殊风味。

0 投票
1 回答
1242 浏览

android - 风味错误 - 找不到与包名称匹配的客户端

我尝试通过本指南实现风味: https ://proandroiddev.com/advanced-android-flavors-part-1-building-white-label-apps-on-android-ade16af23bcf

但我收到此错误:

找不到与包名称“com.example.client1”匹配的客户端

这是我的毕业生:

这是源代码树:

任何帮助将不胜感激!

0 投票
0 回答
79 浏览

android - 玩保护口味问题

当我尝试安装我的发布 apk 谷歌播放保护会出错。我从这个应用程序中获得了五种口味,其中一种在谷歌游戏商店中。当我安装Play商店中的应用程序时,它会直接安装而不会出错。但是当我尝试安装 Play 商店中没有的其他版本时,Google Play Protect 会警告我有关该 apk 的信息。我不知道如何解决这个问题。

0 投票
1 回答
52 浏览

android - 找不到具有与包名称不同的 applicationIds 风味的资源

所以我的应用程序有多种风格,其 applicationId 与包名称不同。当我尝试查看布局是否包含一个 id 时,它说它不包含它,但它实际上只执行 R 文件的路径是 applicationId,而我在代码中使用的那个是包名,这个自然会导致不同的int。我该如何解决这个问题?

基本上我的布局有路径:“applicationId:id/action_home” 我在代码中使用的是生成的路径:“packagename:id/action_home”

0 投票
1 回答
133 浏览

android - 为什么我的 Gradle 脚本中的变量没有定义?

我想做的是创建 6 个不同的变体,每个变体几乎没有 AndroidManifest。数据是动态计算的,不能简单variant/AndroidManifest.xml的手动输入。

当我为特定变体运行构建脚本时,比如“TinyDebug”,它并没有做我想做的事情。在这种情况下,我希望它具有版本代码 1501。

我在这里对脚本进行了大量编辑,以使其更具可读性。由于数据计算的复杂性,我宁愿将它们放在一个任务中(初始化任务依赖于该任务)。

问题:为什么 AndroidManifest 中的 version_code 计算不正确?我应该如何执行我的计算,以便他们可以考虑风味,并将他们的输出传递给AndroidManifest.xml

构建.gradle

构建后的 AndroidManifest.xml(应该是 1501)

0 投票
0 回答
221 浏览

android - 如何使用 gradle uploadArchives 任务上传所有风味 aar 文件?

我有不同风格的 android 库项目。每种风味都与不同的服务器 URL 相关。

我想构建不同的 aar 并将它们全部上传到 Nexus。但是我不知道在执行uploadArchives 时如何选择所有productFlavors。

如果有人知道如何解决我的问题,请帮助我,谢谢!

这是库中的 build.gradle:

uploadArchives 任务工作正常,没有味道

但是在我添加了flavorDimensions之后它就不起作用了。

我需要使用不同的 artifactId 或版本将我所有的 aars 上传到 Nexus。我想在我的其他项目中使用它,如下所示:

或者

如果可能,请帮助我。

0 投票
2 回答
751 浏览

android - 独特的 buildConfigField,适用于所有具有维度的风格

我有两个风味维度:brand并且version,我的风味配置如下所示:

我希望buildConfigField每个配置都有四个唯一的 -s(例如 HockeyAppId):

  • 品牌1版本1
  • 品牌1版本2
  • 品牌2版本1
  • 品牌2版本2

我怎么能做到这一点?

0 投票
2 回答
4165 浏览

android - 为每个 android 风格使用不同的库模块

我想为每种口味使用不同的库模块。

例如:

  • 免费风味 -> 我需要使用免费库模块
  • 付费风味 -> 我需要使用付费库模块

我的口味

我试过的

但我得到编译错误无法使用它

注意:这不是重复的问题。我已经尝试了一些 StackOverflow 问题。它已经过时了(他们正在使用编译)

参考 -基于 Android Gradle 中多风味库的多风味应用

解决方案(来自 Gabriele Mariotti 评论)