首页 > 解决方案 > Android:是否有任何方法可以在不同的 falvors 和 sourceset 之间共享资源?

问题描述

我有一个具有以下源集和风味的应用程序:flavorDimensions “brand”

productFlavors {
flavor1 {
    dimension "brand"
    sourceSets {
        main {
            manifest.srcFile "src/main/flavor1/AndroidManifest.xml"
            resources.srcDirs = ['src/flavor1/']

        }
    }
}

flavor2 {
    dimension "brand"
    sourceSets {
        main {
            manifest.srcFile "src/main/flavor2/AndroidManifest.xml"
            resources.srcDirs = ['src/flavor2/']

        }
    }
}
flavor3 {
    dimension "brand"
    sourceSets {
        main {
            manifest.srcFile "src/main/flavor3/AndroidManifest.xml"
            resources.srcDirs = ['src/flavor3/']

        }
    }
}

我的应用程序是这样的,99% 的布局和类是相同的。例如,只有布局文件main_activity.xml在不同风格之间有所不同,但其他 20~30 个布局文件完全相同。我不想将这 20~30 个复制到三个不同的风味源集中。有没有办法在三种风格之间共享它们,如果源集中存在文件,它会覆盖共享文件?(比如想要 android 为drawableand做的drawble-hdpi,...)?所以我不想拥有

标签: androidgradleandroid-flavorsandroid-buildconfigandroid-sourcesets

解决方案


除非我误解了这个问题,否则您可以通过像这样更改 build.gradle 来解决问题:

productFlavors {

    flavor1 {
        dimension "brand"
    }

    flavor2 {
        dimension "brand"
    }

    //...
}

并像这样构建您的应用程序模块:

/src
    /main
    /flavor1
    /flavor2
   ...

并将所有公共文件(源、资源)放在 main 中,并将自定义/特定文件放在 flavorX 文件夹中,这将导致 gradle 在构建每个风味时替换 main 中的同名文件。


推荐阅读