11

Android Studio (build.gradle) で複数のフレーバーによって依存関係をコンパイルする方法はありますか?

2 つのフレーバー グループがあり、それぞれに 2 つのバリアントがあります。4 つの可能な組み合わせのうち、最新かつ無料のフレーバーの場合にのみ、lib に依存できるようにしたいと考えています。latestCompile または freeCompile は機能しますが、latestFreeCompile は機能しません。これは私のbuild.gradleの関連部分です:

android {
    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 19
        versionCode 15
        versionName "1.9." + versionCode
    }

    flavorGroups 'sdk', 'cost'

    productFlavors {
        latest {
            flavorGroup 'sdk'
            minSdkVersion 8
        }
        sdk7 {
            flavorGroup 'sdk'
            minSdkVersion 7
            versionName android.defaultConfig.versionName + ".sdk7"
        }
        free {
            flavorGroup 'cost'
        }
        pro {
            flavorGroup 'cost'
        }
    }
}
dependencies {
    // this works:
    freeCompile files('libs/StartAppInApp-2.2.1.jar')

    // and I would like something like this:
    latestFreeCompile 'com.google.android.gms:play-services:4.1.32' // minSdkVersion:8
}

私が使用する場合:

latestCompile 'com.google.android.gms:play-services:4.1.32'

次に、 latestPro にも含まれます(必要ありません)。使用する場合:

freeCompile 'com.google.android.gms:play-services:4.1.32'

その後、sdk7Free にも含まれます (ただし、SDK 8 が必要です)。

4

3 に答える 3

4

Android Developersの公式ウェブサイトで説明されているように、プロダクト フレーバーとビルド タイプの特定の組み合わせの依存関係を宣言する場合は、最初にその構成を宣言する必要があります。

たとえば、freeフレーバーとdebugタイプの場合:

configurations {
    freeDebugImplementation {}
}

dependencies {
    freeDebugImplementation 'com.google.firebase:firebase-ads:9.8.0'
}

高度: 複数のフレーバー次元

アプリに複数のフレーバー ディメンションがある場合は、次のように、完全なビルド バリアント (すべてのフレーバー、次にビルド タイプ) に対応する構成を作成する必要があることに注意してください。

flavorDimensions "money", "image" 
productFlavors {
    free { dimension "money" }
    paid { dimension "money" }

    picasso { dimension "image" }
    glide { dimension "image" }
}

configurations {
    freePicassoDebugImplementation {}
    freeGlideDebugImplementation {}
}

dependencies {
    freePicassoDebugImplementation 'com.google.firebase:firebase-ads:9.8.0'
    freeGlideDebugImplementation 'com.google.firebase:firebase-ads:9.8.0'
}
于 2020-03-20T14:24:52.540 に答える
1

ここでも同じ問題ですが、Gradle の依存関係には、選択したフレーバー/ビルド タイプだけでなく、それらすべてのビルドを開始する他の問題があり、より動的なソリューションが必要なため、Pawel のソリューションは機能しませんでした。

それでも、この課題トラッカーを見つけました: https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id =52962

上記のすべてを再構築するバグを修正するための参照もありますが、まだ試していません。

そして、この解決策を実装しました(Issue Trackerの返信#60に従って):

    Map<String, Dependency> customDeps = new HashMap<String, Dependency>()

    customDeps.put('flavor1GrpXflabor1GrpYDebugCompile', dependencies.project(path: ':lib', configuration: 'debug'))
    customDeps.put('flavor1GrpXflavor1GrpYReleaseCompile', dependencies.project(path: ':lib', configuration: 'release'))

    customDeps.put('flavor2GrpXflavor1GrpYDebugCompile', dependencies.project(path: ':other_lib', configuration: 'debug'))
    customDeps.put('flavor2GrpXflavor1GrpYReleaseCompile', dependencies.project(path: ':other_lib', configuration: 'release'))

    ....

    configurations.all() { config ->
        Dependency d = customDeps.get(config.name)
        if (d != null) {
            config.dependencies.add(d)
        }
    }
于 2015-03-07T16:29:20.597 に答える