问题标签 [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.
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 的正确风格中读取资源。
有人可以帮忙吗?谢谢
android - 多维构建风格中的不同签名配置
小例子将描述这种情况:
任务: 我需要为fruitProduction和fruitDevelopment风格保留不同的签名配置。
我研究了 gradle doc,但没有找到合适的任务,我可以覆盖配置以获得特殊风味。
android-studio - Android Studio 构建不关心我的 Gradle 风格?
我正在尝试使用风味来构建具有不同资产质量的不同 APK。问题是,在选择了一个构建变体之后,它似乎仍然运行所有的风格,而不仅仅是正确的。
所以我的build.gradle
样子是这样的。
我得到这样的构建输出
如您所见,它确实以app:assembleHightableDebug开头,但它只是从上到下执行所有风格。我希望它只做 HighTable 分区(和默认)。怎么了?我究竟做错了什么?奇怪的是,它似乎只运行一次configureObbFile和setupScreenSupport,带有“微小”的味道。
android - 找不到具有与包名称不同的 applicationIds 风味的资源
所以我的应用程序有多种风格,其 applicationId 与包名称不同。当我尝试查看布局是否包含一个 id 时,它说它不包含它,但它实际上只执行 R 文件的路径是 applicationId,而我在代码中使用的那个是包名,这个自然会导致不同的int。我该如何解决这个问题?
基本上我的布局有路径:“applicationId:id/action_home” 我在代码中使用的是生成的路径:“packagename:id/action_home”
android - 基于旧应用创建新的 Android 应用
由于新的 Google 隐私政策,我有一个 Android 应用程序已从 Play 商店中删除。旧的使用短信和电话状态权限,现在我创建了一个没有这些权限的新的,功能减少了。我想发布这个新版本,但有一个新的名称或风格,我不知道这就是我在这里的原因,以避免当前用户的自动应用更新。因此,新用户可以下载新版本,而旧用户则保留完整功能的应用程序。
此时我已经克隆了旧项目并创建了新版本。作为新应用上传时,我应该采取什么预防措施?我应该更改项目名称吗?更改apk密钥?创造新口味?
我迷路了。请指导我。
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..
android - 如何使用 gradle uploadArchives 任务上传所有风味 aar 文件?
我有不同风格的 android 库项目。每种风味都与不同的服务器 URL 相关。
我想构建不同的 aar 并将它们全部上传到 Nexus。但是我不知道在执行uploadArchives 时如何选择所有productFlavors。
如果有人知道如何解决我的问题,请帮助我,谢谢!
这是库中的 build.gradle:
uploadArchives 任务工作正常,没有味道
但是在我添加了flavorDimensions之后它就不起作用了。
我需要使用不同的 artifactId 或版本将我所有的 aars 上传到 Nexus。我想在我的其他项目中使用它,如下所示:
或者
如果可能,请帮助我。
android - Gradle - Android - buildConfigField 基于一对 (productFlavors, buildTypes)
我有一个字段 YOUR_POWER 设置为基于 BuildType 的值。
我的配置build.gradle
:
我怎样才能有一些配置,如:free + debug = power 70
; free + release = power 80
; paid + debug = power 90
和paid + release = power 100
?
欢迎任何建议/替代解决方案:)
@updated:这只是一个例子,字段类型也可以是字符串。
同样的问题:如何为每个构建变体设置不同的构建类型
android - 是否有机会更改 android 中的构建变体运行时间
我使用产品风格来构建不同的应用程序。如果我在运行应用程序之前在构建变体中选择免费风味,则将运行免费风味,如果我选择付费风味,则将运行付费风味。
我想更改运行时间意味着在运行应用程序后,如果我们单击按钮,它必须更改付费应用程序。是否有机会通过编程更改构建变体选择运行时间。
我用这些作为调味剂。
如果有人知道解决方案,请帮助我解决我的问题。
提前致谢。
android - 根据 Flavor 在 Android Studio 中显示布局
我在 Android Studio 中有一个项目,它对不同的颜色使用不同的风格(还有一些其他的东西,但它们并不重要)。
我想看看某个 UI 元素(全部由 xml 文件定义)看起来如何具有非默认风格?
假设我必须选择风味,风味 A 是默认的,风味 B 不是。假设风味 A 的主色是红色,风味 B 的主色是绿色。
当我打开布局时,无论选择构建变体中的哪种风格,它们都将始终显示为红色。
我确定有办法做到这一点,但我不知道如何。
Edit1:似乎我没有解释它(认为它是隐含的)。我的风味资源文件已经在不同的文件夹中。资源文件中的颜色同名。这不是问题,问题是我在 Android Studio 内部的布局中看不到颜色。
颜色位于单独的文件夹中,并且可以正常工作。当我构建和安装口味时,它们会使用它们的颜色。但是当我打开一个布局时,它总是在 Android Studio 中以默认颜色显示