如何更改 Android productFlavors 的根文件夹

How to change the root folders for Android productFlavors

是否可以更改默认的 flavors 根路径?

发件人:

---src
-----main
-----flavor1
-----flavor2
-----flavor3

收件人:

---src
-----main
-----flavors
--------flavor1
--------flavor2
--------flavor3

您可以使用 sourceSets 来实现。

productFlavors {
    flavor2 {
    }
    flavor1 {
    }
}

sourceSets{

    flavor2 {
        manifest.srcFile 'AndroidManifest-flavor2.xml'
        res.srcDirs = ['res-flavor2', 'res']
        java.srcDirs = ['src/flavor2/java','src/commonFiles/java']
        resources.srcDirs = ['src/flavor2/java','src/commonFiles/java']
        aidl.srcDirs = ['src/flavor2/java','src/commonFiles/java']
        renderscript.srcDirs = ['src/flavor2/java','src/commonFiles/java']
    }

    flavor1 {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src/flavor1/java','src/commonFiles/java']
        resources.srcDirs = ['src/flavor1/java','src/commonFiles/java']
        aidl.srcDirs = ['src/flavor1/java','src/commonFiles/java']
        renderscript.srcDirs = ['src/flavor1/java','src/commonFiles/java']
        res.srcDirs = ['res-flavor1','res']
        assets.srcDirs = ['assets']
    }

}

是的,这可以使用 sourceSets 实现,但正确且更简单的解决方案是:

productFlavors{
    flavor1 {}
    flavor2 {}
}

sourceSets{
    flavor1.setRoot('src/flavors/flavor1')
    flavor2.setRoot('src/flavors/flavor2')
}

如果您不想每次添加风味时都在 sourceSets 中添加一行,您可以像这样使用闭包

productFlavors{
    flavor1 {}
    flavor2 {}

    all { flavor ->
        sourceSets[flavor.name].setRoot("src/flavors/${flavor.name}")
    }
}