gradle android插件和buildtype源集的问题

Chi*_*eta 2 android gradle

我是gradle的新手,想要使用gradle android插件,包括flavor,buildtypes和自定义源集.有味道和建筑类型的建筑工程找到.不幸的是我有一个遗留的项目目录结构,所以我必须自定义buildtypes的res目录.

不知何故,构建类型的额外资源(基本上是一些字符串配置值)似乎没有合并到构建中,也不会从主树中替换资源键.

这之前被问过,我知道有 Gradle产品的源代码和旧的项目结构 , 我如何指定每个flavor buildType sourceSets?

我想引用第一篇文章中的Xavier:"你需要首先声明你的口味,然后自定义sourceSets."

我知道一个flavor配置会自动创建sourcesets,之后需要对它们进行修改.这就是我在下面的build.gradle中尝试的内容,但我为每个构建类型添加的"res.srcDirs"似乎被忽略了,我无法弄清楚原因.

在第二篇文章中(带有github链接的最后一条评论),我在build.gradle中看到了复杂的源代码集修改.还有一种更简单的方法吗?(见这里:https://github.com/shakalaca/learning_gradle_android/blob/master/07_tricks/app/build.gradle)

这是我的gradle android插件的构建配置:

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 17
    }

    sourceSets {

        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }

    productFlavors {
        normal {
        }

        proguard {
            proguardFile file("proguard-project.txt")
        }
    }


    buildTypes {

        dev {
            packageNameSuffix ".dev"
            debuggable true
            signingConfig android.signingConfigs.debug

        }

        beta {
            packageNameSuffix ".beta"
            debuggable true
            signingConfig android.signingConfigs.debug
        }

        live {
            packageNameSuffix ".live"
            debuggable true
            signingConfig android.signingConfigs.debug
        }
    }

   sourceSets.dev.res.srcDirs = ['variations/dev']
   sourceSets.beta.res.srcDirs = ['variations/staging']
   sourceSets.live.res.srcDirs = ['variations/live']
}
Run Code Online (Sandbox Code Playgroud)

slo*_*ott 5

如果更改脚本的顺序,则可以使用更好的结构并使其更易于阅读.

假设您有发布,测试版和调试类型,并且您想要一个不同的源目录,您可以这样做:

    buildTypes {
    release {
        debuggable false
        jniDebugBuild false
        runProguard true
        proguardFile 'proguard-android.txt'

        // Links to signing config above.
        signingConfig signingConfigs.release
    }

    debug {
        packageNameSuffix ".debug"
        versionNameSuffix ".debug"

    }
    beta {
        // Import release code - avoid having the same code twice!
        initWith release
        packageNameSuffix ".beta"
        versionNameSuffix ".beta"
    }
}

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

    release {
        res.srcDirs = ['res', 'res-release']
    }

    beta {
        res.srcDirs = ['res', 'res-beta']
    }

    debug {
        res.srcDirs = ['res', 'res-debug']
    }
}
Run Code Online (Sandbox Code Playgroud)

注意buildTypessourceSets的顺序!