问题标签 [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 回答
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 回答
121 浏览

android-studio - Android Studio 构建不关心我的 Gradle 风格?

我正在尝试使用风味来构建具有不同资产质量的不同 APK。问题是,在选择了一个构建变体之后,它似乎仍然运行所有的风格,而不仅仅是正确的。

所以我的build.gradle样子是这样的。

我得到这样的构建输出

如您所见,它确实app:assembleHightableDebug开头,但它只是从上到下执行所有风格。我希望它只做 HighTable 分区(和默认)。怎么了?我究竟做错了什么?奇怪的是,它似乎只运行一次configureObbFilesetupScreenSupport,带有“微小”的味道。

0 投票
1 回答
52 浏览

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

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

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

0 投票
1 回答
268 浏览

android - 基于旧应用创建新的 Android 应用

由于新的 Google 隐私政策,我有一个 Android 应用程序已从 Play 商店中删除。旧的使用短信和电话状态权限,现在我创建了一个没有这些权限的新的,功能减少了。我想发布这个新版本,但有一个新的名称或风格,我不知道这就是我在这里的原因,以避免当前用户的自动应用更新。因此,新用户可以下载新版本,而旧用户则保留完整功能的应用程序。

此时我已经克隆了旧项目并创建了新版本。作为新应用上传时,我应该采取什么预防措施?我应该更改项目名称吗?更改apk密钥?创造新口味?

我迷路了。请指导我。

0 投票
0 回答
171 浏览

android - 如何在多模块 Gradle 项目中声明“传递”风味依赖项?

例如,我有 3 个模块(A、B 和 C),其中 A 依赖于 B,B 依赖于 C(A->B->C)。模块 A 是构建过程的入口点,没有其他模块依赖它,例如 Android 应用程序中的 :app 模块。模块 A 和 C 具有相同的风味维度和相同的风味集(例如风味 1、风味 2、风味 3、风味 4 等)。模块 B 没有任何风味。

现在的问题是:如何将这些依赖项定义为“传递性”,以使模块 A 和模块 C 总是在风格上匹配?

模块 A(flavor1) -> 模块 B -> 模块 C(flavor1)

模块 A(flavor2) -> 模块 B -> 模块 C(flavor2)

模块 A(flavor3) -> 模块 B -> 模块 C(flavor3)

ETC..

如果所有 3 个模块都具有相同的风味,Gradle 会自动匹配它们,但由于 B 没有风味,因此会发生此问题中已经描述的错误:Single flavor module based on multi flavor library in Gradle but non of answers is really相关的 :(

我现在需要的是,如果我运行 ./gradlew buildFlavor1Debug 以获取带有 flavor1 的模块 A 和 C,并且通常让所有知道风味的模块与链开始时给出的风味相匹配,并且模块不不知道口味只是为了转发/忽略它们。

missingDimensionStrategy 'dimension' 的问题在于,它需要依赖的味道是硬编码/固定的,而不是基于构建的入口点的动态,例如:missingDimensionStrategy 'myDimension' 'flavor1'

模块 A(flavor1) -> 模块 B -> 模块 C(flavor1)

模块 A(flavor2) -> 模块 B -> 模块 C(flavor1)

模块 A(flavor3) -> 模块 B -> 模块 C(flavor1)

ETC..

0 投票
0 回答
221 浏览

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

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

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

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

这是库中的 build.gradle:

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

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

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

或者

如果可能,请帮助我。

0 投票
2 回答
756 浏览

android - Gradle - Android - buildConfigField 基于一对 (productFlavors, buildTypes)

我有一个字段 YOUR_POWER 设置为基于 BuildType 的值。

我的配置build.gradle

我怎样才能有一些配置,如:free + debug = power 70; free + release = power 80; paid + debug = power 90paid + release = power 100

欢迎任何建议/替代解决方案:)

@updated:这只是一个例子,字段类型也可以是字符串。

同样的问题:如何为每个构建变体设置不同的构建类型

0 投票
1 回答
730 浏览

android - 是否有机会更改 android 中的构建变体运行时间

我使用产品风格来构建不同的应用程序。如果我在运行应用程序之前在构建变体中选择免费风味,则将运行免费风味,如果我选择付费风味,则将运行付费风味。

我想更改运行时间意味着在运行应用程序后,如果我们单击按钮,它必须更改付费应用程序。是否有机会通过编程更改构建变体选择运行时间。

我用这些作为调味剂。

如果有人知道解决方案,请帮助我解决我的问题。

提前致谢。

0 投票
3 回答
4040 浏览

android - 根据 Flavor 在 Android Studio 中显示布局

我在 Android Studio 中有一个项目,它对不同的颜色使用不同的风格(还有一些其他的东西,但它们并不重要)。

我想看看某个 UI 元素(全部由 xml 文件定义)看起来如何具有非默认风格?

假设我必须选择风味,风味 A 是默认的,风味 B 不是。假设风味 A 的主色是红色,风味 B 的主色是绿色。

当我打开布局时,无论选择构建变体中的哪种风格,它们都将始终显示为红色。

我确定有办法做到这一点,但我不知道如何。

Edit1:似乎我没有解释它(认为它是隐含的)。我的风味资源文件已经在不同的文件夹中。资源文件中的颜色同名。这不是问题,问题是我在 Android Studio 内部的布局中看不到颜色。

颜色位于单独的文件夹中,并且可以正常工作。当我构建和安装口味时,它们会使用它们的颜色。但是当我打开一个布局时,它总是在 Android Studio 中以默认颜色显示