android - Gradle Android buildTypes 相互覆盖

标签 android build gradle multi-module multi-project

我很感激任何帮助,因为我是一个 gradle 新手。我有一个包含多个 buildType 的构建脚本,但似乎其中一个的设置覆盖了其他的。

这是我的 build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.2'
    }
}

apply plugin: 'android'

dependencies {
    compile project(':facebook-android-sdk-3.0.1:facebook')
    compile project(':google-play-services_lib')
    compile project(':nineoldandroids')
    compile project(':SlidingMenu-master:library')
    compile project(':ViewPagerIndicator')
    compile project(':volley')
    compile project(':windowed-seek-bar')
    compile files('compile-libs/androidannotations-2.7.1.jar', 'libs/Flurry_3.2.1.jar', 'libs/google-play-services.jar', 'libs/gson-2.2.4.jar', 'libs/picasso-1.1.1.jar', 'libs/crittercism_v3_0_11_sdkonly.jar', 'libs/gcm.jar', 'libs/apphance-library.jar')
}

android {
    buildToolsVersion "17.0"
    compileSdkVersion 17

    signingConfigs {
        debug {
            storeFile file('keystores/debug.keystore')
        }

        release {
            storeFile file('keystores/release.keystore')
            storePassword "***"
            keyAlias "***"
            keyPassword "***"
        }
    }

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

        release {
            signingConfig signingConfigs.release

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

        utest {
            debuggable true
            signingConfig signingConfigs.debug

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

utest 的设置覆盖了 release 和 debug 的设置。有人知道为什么吗?

最佳答案

您对源集的使用是错误的。它不在每个构建类型闭包中。它们是自己声明的:

android {
    buildTypes {
        debug {
            ...
        }
        release {
            ...
        }
        utest {
            ...
        }
    }

    sourceSets {
        debug {
            ...
        }
        release {
            ...
        }
        utest {
            ...
        }
    }
}

请注意,构建类型在“主要”源集之上有自己的源集。所以你不应该将所有构建类型源集设置为使用“src”。你可以做

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

请注意,在这种情况下,utest/AndroidManifest.xml 下的 list 将合并到主 list 中。

关于android - Gradle Android buildTypes 相互覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626305/

相关文章:

Angular - 构建配置中 "optimization"和 "buildOptimizer"之间的差异(angular.json)

javascript - WebView.javaScriptEnable(true); android中的空指针异常错误

android - 如何防止 Retrofit 自动跟随 302

documentation - 如何在不更改默认安装文件的情况下修改 SandcaSTLe 演示样式

iphone - iPhone 版本的 "Show Package Contents"显示空白 PNG?

java - 我的 android 项目依赖 httpclient 和 httpMime 无法构建

gradle - Gradle:从作为工件下载的外部gradle文件中应用

android - MPAndroidChart 使用 Proguard 编译错误

android - 如果筛选 ListView 不再包含任何结果,如何显示特殊消息?

android - 在 startIntentSenderForResult() 之后未调用 onActivityResult()