14

デバッグとリリース用の独自の Google マップ (v1) キー (つまり合計 4 つのキー) を持つ 2 つのフレーバーのアプリがあります。そのため、buildType と productFlavor に基づいて sourceSets を指定できるかどうかを知りたいです。本質的に、私は次のようなことをどのように達成できるのか疑問に思っています:

src
├── debug
│   └── flavor1
│       └── res
│           └── values
│               └── gmaps_key.xml
├── release
│   └──flavor1
│       └── res
│           └── values
│               └── gmaps_key.xml

gradle がsrc/<currentBuldType>/<currentProductFlavor>/*sourceSet の一部として使用する場所。

基本的に、実行すると、、、およびの下のgradle assembleFlavor1Debugすべてが含まれるようにします。src/main/*src/flavor1/*src/debug/flavor1/*

私の build.gradle はとてもシンプルです:

buildscript {
    repositories {
        mavenCentral()
    }   

    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.0'
    }   
}

apply plugin: 'android'

android {
    compileSdkVersion 8

    productFlavors {
        flavor1 {
            packageName 'com.flavor1'
        }
        flavor2 {
            packageName 'com.flavor2'
        }
    }
}

何かご意見は?それとも、これに対するより良いアプローチですか?

4

2 に答える 2

17

私の答えに対するコメントのためにたまたまこれに戻ってきて、この答えが不要であることに気付きました(受け入れられたものよりもさらに優れています)。各 productFlavor および buildType には、組み合わせおよび個別のソース セットが既に存在します。つまりsrc/{buildType}src/{productFlavor}src/{productFlavor}{buildType}は既に使用可能なソース フォルダーです。

基本的に、OPに必要なのは、OPが想定するsrc/flavor1Debugものと同等のリソースを配置することだけでした。src/debug/flavor1

OLD ANSWER: で似たようなことをしたことがありますbuildConfigが、うまくいけばうまくいくはずsourceSetsです。

基本的に、変数のレベルで共通のものを定義し、productFlavors下に移動するにつれて追加し続けます。

productFlavors {
        def common = 'src/main'

        flavor1 {
            def flavor = 'src/main/flavor1'
            buildTypes {
                debug {
                    sourceSets {
                        res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/debug'
                    }
                }

                release {
                    sourceSets {
                        res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/release'
                    }

            }
        }
}

私はこれをテストしていません。android.sourceSetsの代わりに使用する必要があるかもしれないと思いますsourceSets

また、 用に別のリソースを定義する必要があったproductFlavorsため、ビルド ファイルの後半で別のステートメントを使用しました。そのようです:

android.sourceSets.flavor1 {
    res.srcDirs = ['flavor_resources/flavor1/res']
}

android.sourceSets.flavor1.debug必要に応じて代わりに使用できるはずです。

また、 Android Gradleユーザー ガイドによると、使用srcDirするとディレクトリがデフォルトのソースに追加され、srcDirsそれらが置き換えられることにも注意してください。

于 2013-08-31T04:28:24.610 に答える
5

Google Maps API の統合については、ここで私の gradle サンプル コードを確認できます: https://github.com/shakalaca/learning_gradle_android/tree/master/07_tricks

android.applicationVariants.all基本的に、フェーズ中にちょっとしたトリックを行い、mergeResources別のフレーバー/ビルドタイプの組み合わせフォルダーの下にあるstrings.xmlにAPIキーを配置します。

于 2013-09-05T08:04:52.850 に答える