Android-将两个构建类型设置到同一源文件夹中



直到最近,我们的Android应用程序只有两个构建类型debugrelease。我们刚刚添加了一个qa构建类型,我希望让qa构建类型指向调试源代码,这样我就不必重复代码了。这可能吗?

qa和debug之间的主要区别是Proguard。我们的build.gradle文件如下所示:

productFlavors {
        dev {
            minSdkVersion 21
        }
        prod {
            minSdkVersion 14
        }
    }
buildTypes {
    debug { 
        // no proguard
        // use debug code
    }
    qa { 
        // proguard
        // use debug code
    }
    release { 
        // proguard
        // use release code
    }
}

文件结构如下:

src
├── debug
│   ├── assets
│   ├── java
│   └── res
├── main
│   ├── java
│   └── res
├── release
│   ├── assets
│   ├── java
│   └── res

我尝试过使用sourceSets,但似乎不起作用:

sourceSets {
    qa {
        java.srcDirs = ['src/debug/java']
        res.srcDirs = ['src/debug/res']
    }
}

我非常接近。我只需要添加android清单文件和资产文件夹的位置。

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

沿着以下几条线的东西应该会让你到达那里:

android {
    ...
    buildTypes {
        qa {
            minifyEnabled true
        }
    }
    sourceSets {
        qa {
            java {
                srcDirs = ['src/main/java']
            }
        }
    }
    ...
}

尽管经过进一步检查,这似乎与您上面的示例相同,但我粘贴的格式对我来说确实有效——也许我遗漏了差异,或者可能是其他原因造成的。

你可以随时破解build.gradle并粘贴这样的东西,以确保你的更改生效:

import static groovy.json.JsonOutput.*
println(
    prettyPrint(toJson(
        android.sourceSets.collectEntries {ss -> [ss.name, ss.java.toString()]}
    ))
)

最新更新