gpt4 book ai didi

Android、Gradle、产品 flavor 和 list

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:01:59 27 4
gpt4 key购买 nike

build.gradle 中,我设置了产品口味:

productFlavors
{
AlternateFlavour
{
applicationId "com.myapp.alternateflavour"
}
}

然后在 sourceSets 部分,我为这些风格使用不同的资源、 Assets 和 list 目录:

sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}

AlternateFlavour {
manifest.srcFile 'manifest-tmp/AlternateFlavour/AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res-tmp/AlternateFlavour']
assets.srcDirs = ['assets-tmp/AlternateFlavour']
}
}

到目前为止还不错。

在部分自动生成的 flavor 使用的 list 中,我有:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.myapp"
android:versionCode="1010001"
android:versionName="V1.1.0.1" >

但在根项目中的原始 list 如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.myapp"
android:versionCode="1010000"
android:versionName="V1.1.0.DEBUG" >

这会导致 Gradle 失败:

Error:
Attribute manifest@versionCode value=(1010001) from AndroidManifest.xml:4:5-28
is also present at AndroidManifest.xml:4:5-28 value=(1010000).
Attributes of <manifest> elements are not merged.

当我指定它应该查看其他地方时,它为什么要尝试与原始 list 合并?

我该如何阻止它?

我预计有些人会质疑我为什么要这样做,或者为什么我不使用建议的 flavor 项目结构。好吧,我需要一个正常的 list 才能在 Gradle 之外使用,例如用于从 Eclipse 部署(请一次做一件事!)我还需要通过构建过程注入(inject)版本。

最佳答案

Why is it trying to merge with the original manifest at all, when I've specified it should look elsewhere?

你说 flavor list 在别处。 list 合并过程合并所有相关 list :

  • 主要
  • 构建类型
  • 产品口味
  • 图书馆

main 中的 list 始终是相关的。

And how can I stop this?

你不需要,因为 main 中的 list 总是相关的。

通常,最好的解决方案是从所有 list 中删除versionCodeversionName,并将它们设置在 中build.gradle,您可以在其中进行完全的编程控制。

下一个最佳解决方案是将 versionCodeversionNamemain list 中移到您不是的产品风格中显示在这里。我从来没有见过有人只创造一种产品 flavor ,据我所知这是毫无意义的——你只能创造一种产品 flavor (因为据我所知,一旦你引入 flavor 就没有无味的构建)。产品风格通常以 2+ 个为一组出现(例如,使用 Play 服务的 google 风格和不使用 Play 服务的 standalone 风格)。如果 main 中的值真的是非 AlternateFlavour 风格,移动你的 main version... 东西那里。

除此之外,欢迎您查看 the documentation on the manifest merger process看看你是否可以输入正确的指令来获得你想要的。

关于Android、Gradle、产品 flavor 和 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35796317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com