首页 文章

如何为不同的产品风格定义不同的依赖关系

提问于
浏览
120

我正在将我的一个应用程序转换为Gradle,并希望使用新的构建风格功能来获得付费和免费的广告风格 .

我只希望基于广告的版本依赖于admob SDK .

我的构建文件如下所示:

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 {

            }
        }
    }
}

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

有没有办法在免费产品风格中配置依赖项,使其拥有自己的libs文件夹,该文件夹与包含两种风格的通用库的主libs文件夹合并?

如果可能,我该如何定义这个文件夹?

4 回答

  • 5

    要定义特定于flavor的依赖项,可以在依赖项部分中使用 proCompile 而不是 compile . 运行gradle属性时,您将获得自动创建配置的概述 .

    正确的构建文件如下所示:

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.2.3'
        }
    }
    apply plugin: 'com.android.application'
    
    repositories {
        mavenCentral()
    }
    
    android {
        compileSdkVersion 22
        buildToolsVersion "22.0.1"
    
        defaultConfig {
            minSdkVersion 10
            targetSdkVersion 22
        }
    
        productFlavors {
            pro {
                packageName "de.janusz.journeyman.zinsrechner.pro"
            }
            free { }
        }
    }
    
    dependencies {
        compile 'com.android.support:support-v4:22.2.0'
        freeCompile 'com.google.android.gms:play-services-ads:7.5.0'
    }
    
  • 6

    您需要为每种风格手动添加配置 . 例

    configurations {
        proCompile
        freeCompile
    }
    
    dependencies {
        compile 'com.parse.bolts:bolts-tasks:1.3.0'
    
        proCompile 'com.android.support:design:23.1.1'
        freeCompile 'com.parse:parse-android:1.12.0'
    }
    
  • 157

    Edit: 我建议使用其他技巧之一!

    接受答案的替代方案是:

    ext {
            flavorType = ""
        }
    
    
        gradle.startParameter.getTaskNames().each { task ->
    
            if(task.contains("flavor1")){
                flavorType = "flavor1"
            } else if (task.contains("flavor2")){
                flavorType = "flavor2"
            } else {
                flavorType = "flavor3"
            }
    
        }
    
     if(flavorType == 'flavor1' || flavorType == 'flavor2') {
            compile 'com.android.support:support-v4:18.0.+'
        }
    
  • 7

    快进到2018年中期 . 您需要添加 flavorDimensions .

    android {
        ...
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
        flavorDimensions "dimensionName"
        productFlavors {
            pro {
                dimension "dimensionName"
            }
            free {
                dimension "dimensionName"
            }
        }
    }
    
    dependencies {
        implementation 'com.android.support:support-v4:22.2.0'
        freeImplementation 'com.google.android.gms:play-services-ads:15.0.1'
    }
    

    另外,请注意:

    配置'compile'已经过时,已被'implementation'和'api'取代 . 它将在2018年底删除 . 有关更多信息,请参阅:http://d.android.com/r/tools/update-dependency-configurations.html

相关问题