为什么我的Gradle产品口味都在建设中?

Jan*_*usz 2 android gradle

我在一个用gradle构建的android项目中有两个产品风格.

其中一种口味声明了额外的依赖性,但实际上两种口味都使用了依赖性.这两种风格都会构建,因为其中一种风味依赖于仅为第一种风格声明的库,而不应该是这种情况.

由于其中一种口味是专业版,最终不应该在apk中有admob SDK我现在担心由于某种原因这两种口味添加了admob SDK.

我有以下build.gradle文件:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }

    productFlavors {
        Pro {
            packageName "de.janusz.journeyman.zinsrechner.pro"
        }
        Free { 
            dependencies {
                compile files('src/Free/libs/admob.jar')
            }
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:18.0.+'
    compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
    compile fileTree(dir: 'libs', include: '*.jar')
}
Run Code Online (Sandbox Code Playgroud)

Jan*_*usz 5

仅为一种产品风格添加依赖关系的正确方法是:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }

    productFlavors {
        pro {
           packageName "de.janusz.journeyman.zinsrechner.pro"
        }
        free { }
    }
}

dependencies {
    compile 'com.android.support:support-v4:18.0.+'
    compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
    compile fileTree(dir: 'libs', include: '*.jar')
    freeCompile files('src/Free/libs/admob.jar')
}
Run Code Online (Sandbox Code Playgroud)