2013-07-13 3 views
4

Буду признателен за любую помощь в этом, так как я noobie w/gradle. У меня есть скрипт сборки с несколькими типами buildTypes, но он показывает, что один из них перезаписывает другие.Gradle Android buildTypes переопределяют друг друга

Вот мой 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 подменяют настройки для выпуска и отладки. Кто-нибудь знает, почему?

ответ

12

Ваше использование исходных наборов неверно. Он не находится внутри каждого типа сборки. Они объявляются сама по себе:

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 будут объединены в главном манифеста.

Смежные вопросы