当前位置: 首页 > 知识库问答 >
问题:

如何指定每个风味构建类型的源集?

农明辉
2023-03-14

我有两种口味的应用程序,每个都有自己的谷歌地图(v1)键调试和发布(意思是总共4个键)。因此,我想知道是否可以基于buildType和ProductFlavely指定sourceSets。本质上,我想知道如何实现这样的目标:

src
├── debug
│   └── flavor1
│       └── res
│           └── values
│               └── gmaps_key.xml
├── release
│   └──flavor1
│       └── res
│           └── values
│               └── gmaps_key.xml

其中gradle将使用src/ / /* 作为其源集的一部分。

实际上,我需要它,以便如果运行gradle assembleflavor1debug,它将包括src/main/*src/flavor1/*src/debug/flavor1/*下的所有内容。

我的建筑。Gradle超级简单:

buildscript {
    repositories {
        mavenCentral()
    }   

    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.0'
    }   
}

apply plugin: 'android'

android {
    compileSdkVersion 8

    productFlavors {
        flavor1 {
            packageName 'com.flavor1'
        }
        flavor2 {
            packageName 'com.flavor2'
        }
    }
}

有什么想法吗?或者是更好的方法?

共有1个答案

姬和歌
2023-03-14

我碰巧回到这个问题,因为我的回答有一个评论,并意识到这个答案是多余的(仍然比公认的更好)。对于每个ProductFlayer和buildType,已经存在组合和单独的源集。例如,src/{buildType}src/{productflavely}src/{productflavely}{buildType}已经是可用的源文件夹。

因此,基本上,OP所需要的就是将资源放在src/debug中,这相当于OP所设想的src/debug/flavor1

旧的答案是:我已经用buildconfig做了类似的事情,但希望它能用sourcesets

基本上,您在变量中的ProductFlavors级别定义常见的内容,并在向下移动时继续添加内容。

productFlavors {
        def common = 'src/main'

        flavor1 {
            def flavor = 'src/main/flavor1'
            buildTypes {
                debug {
                    sourceSets {
                        res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/debug'
                    }
                }

                release {
                    sourceSets {
                        res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/release'
                    }

            }
        }
}

我没测试过这个。我认为您可能需要使用Android.sourcesets,而不仅仅是sourcesets

我还需要为ProductFlavors定义单独的资源,所以我在构建文件的后期使用了单独的语句。像这样:

android.sourceSets.flavor1 {
    res.srcDirs = ['flavor_resources/flavor1/res']
}
 类似资料:
  • 假设flavor1a、flavor1b、flavor2a和flavor2b... 假设目录结构: 在gradle中,有没有一种简单的方法可以做到以下几点: 我似乎不能通过sourceSets=['src/xxxx']在我的构建中的每个产品版本中进行配置。gradle

  • 问题内容: 任何人都可以向我解释,除了主要的和特定于风味的java / src目录之外,我如何能更多地用于每种风味?我的目标是拥有不只一种口味但并非全部使用的目录。 例如,我有3种口味:A1,A2和B。 所有忙都使用main / src(默认的主src目录) A1使用A1 / src(默认的src目录) A2使用A2 / src(默认的src目录) B使用B / src(默认的src目录) A1和

  • 我有一个gradle.build,它适用于主要目标。我想为皮肤版本添加味道。我已经将它们添加到gradle构建中,但我不明白我应该将另一个版本的文件放在哪里,在哪个文件夹中,它应该是什么名称?让我们考虑一个例子:主包com.example.app与android应用程序通用的项目结构(我在Source ceSets中这样做)。据我所知,我应该创建文件夹(不是一组子文件夹)com.example.a

  • 3.4.2 构建类型 默认情况下,Android plugin 会自动的设置工程,构建 release 和 debug 两个版本。 他们主要的差异主要在于是否可以在设备上调试应用以及APK如何签名。 debug 版本会被使用已知的名称/密码自动生成的密钥/证书签名。release 版本在构建过程中不会被签名,需要构建后再签名。 这些配置可以通过一个叫 BuildType 配置。默认情况下,已经创建

  • 我确信这以前被问过,但我只是没有找到正确的关键字来寻找答案,所以... 当我请求构建一种构建类型时,如何阻止Gradle for Android(在Android Studio内部或外部)构建库模块的所有构建类型?注意,如果我正在构建,我如何防止Gradle for Android也构建? 对于那些有其他想法的人来说,背景故事是: 假设我有两个Android Studio项目,A和B。每个项目都有

  • 默认情况下,Android Plugin 会自动给项目构建 debug 和 release 版本。两个版本的区别在于能否在安全设备(非 dev)上调试,以及 APK 如何签名。debug 使用通过通用的 name/password 对生成的密钥证书进行签名(为了防止在构建过程中出现认证请求)。release 在构建过程中不进行签名,需要自行签名。 这些配置是通过 BuildType 对象来完成的。