Gradle Android buildTypes override each other

I would appreciate any help with this, as I am noobie w / gradle. I have a build script with several types of buildTypes, but the settings for one of them are displayed, which the others overwrite.

Here is my 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'] } } } } } 

Settings for utest override options for release and debugging. Does anyone know why?

+4
source share
1 answer

Misuse of source sets. It is not inside each type of assembly. They are declared on their own:

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

Note that assembly types have their own source sets on top of the "core" source sets. Thus, you do not have to install all sources of assembly type to use 'src'. You could do

 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'] } } } 

Please note that in this case the manifest under utest/AndroidManifest.xml will be merged into the main manifest.

+12
source

Source: https://habr.com/ru/post/1491232/


All Articles