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

cidc1ykv  于 2023-03-28  发布在  Android
关注(0)|答案(6)|浏览(383)

我正在将我的一个应用程序转换为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文件夹合并?
如果可能的话,我该如何定义这个文件夹?

tpgth1q7

tpgth1q71#

要定义特定于风味的依赖项,您可以在依赖项部分使用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'
}
ntjbwcob

ntjbwcob2#

快进到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

i86rm4rw

i86rm4rw3#

简单:

dependencies {

    ....
    ....

    gradle.startParameter.getTaskNames().each { task ->
        if(task.contains("free")) {
             implementation 'com.google.android.gms:play-services-ads:17.2.0'
        }
    }

    ....
    ....
}

或者只是:

FreeImplementation 'com.google.android.gms:play-services-ads:17.2.0'
fjaof16o

fjaof16o4#

您需要手动为每种风味添加配置。示例

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

nnt7mjpx5#

**编辑:**我建议使用其他技术之一!

另一个被接受的答案是:

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.+'
    }
gmol1639

gmol16396#

如果您将Gradle与Kotlin一起使用(build.gradle.kts),则可以添加自定义风味的依赖项,如下所示:

dependencies {
    "freeImplementation"("com.google.android.gms:play-services-ads:7.5.0")
}

相关问题