如何在 android gradle.kts 中定义自定义源集?

Posted

技术标签:

【中文标题】如何在 android gradle.kts 中定义自定义源集?【英文标题】:How to define custom source set in android gradle.kts? 【发布时间】:2021-11-18 09:57:26 【问题描述】:

我想在三个商店发布我的应用程序。我的应用程序中有汇率部分和更新对话框(其中有一个按钮可以转到商店以更新应用程序)。为了管理这些功能,我决定将三种风格和三种来源设置为在不同的 kotlin 文件中具有不同的速率和更新部分实现。 这是我的 Gradle 文件:

android 
    flavorDimensions("appStores")
    productFlavors
        create("p1Flavor")
            dimension="appStores"
            sourceSets 
                create("p1SourceSet")
                    java.srcDirs("src/main/java","src/firstStoreDir")
                
            
        
        create("p2Flavor")
            dimension="appStores"
            sourceSets 
                create("p2SourceSet")
                    java.srcDirs("src/main/java","src/secondStoreDir")
                
            
        
        create("p3Flavor")
            dimension="appStores"

            sourceSets 
                create("p3SourceSet")
                   java.srcDirs("src/main/java","src/thirdStoreDir")
                
            
        
    

我想为每种风味添加一个包含两个文件(updateStore.kt 和 rate.kt)的目录到 src。我的意思是我有三个具有三个不同名称的目录,每个目录都包含具有不同实现的 updateStore.kt 和 rate.kt。

当我构建我的项目时,我收到了这个错误:

The SourceSet 'p1SourceSet' is not recognized by the Android Gradle Plugin. Perhaps you misspelled something?

我该怎么办?

【问题讨论】:

【参考方案1】:

我意识到使用源集不适合这种情况,我决定使用 buildConfigField。

android 
    flavorDimensions("appStores")
    productFlavors
        create("p1Flavor")
            dimension="appStores"
            buildConfigField("String","APP_STORE_NAME","\"p1store\"")
        
        create("p2Flavor")
            buildConfigField("String","APP_STORE_NAME","\"p2store\"")
            dimension="appStores"
        
        create("p3Flavor")
            buildConfigField("String","APP_STORE_NAME","\"p3store\"")
            dimension="appStores"
        
    

以及我需要了解选择哪种口味的每个地方,我都使用这些代码:

when(BuildConfig.APP_STORE_NAME)
        "p1store" -> 
            //TODO
        
        "p2store" -> 
            //TODO
        
        "p3store" ->
            //TODO
        
    

【讨论】:

以上是关于如何在 android gradle.kts 中定义自定义源集?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 gradle kts 中排除(忽略)android 构建变体

Android Studio 和 Gradle KTS 构建文件

Android Studio:使用 Gradle KTS 构建文件的项目结构不可用

【白水日记】使用build.gradle.kts

如何在 build.gradle.kts 中设置 openApi 生成器全局属性

如何解析和修改build.gradle.kts Kotlin Gradle构建脚本?