2

直到最近我们的 Android 应用程序只有两个 buildTypesdebugrelease. 我们刚刚添加了一个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']
    }
}
4

2 回答 2

2

我是如此接近。我只需要添加 android manifest 文件和 assets 文件夹的位置。

sourceSets {
    qa {
        manifest.srcFile 'src/debug/AndroidManifest.xml'
        java.srcDirs = ['src/debug/java']
        res.srcDirs = ['src/debug/res']
        assets.srcDirs = ['src/debug/assets']
    }
}
于 2015-11-13T04:27:12.290 回答
0

沿着这些路线的东西应该让你到达那里:

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()]}
    ))
)
于 2015-11-11T05:03:34.510 回答