0

最近、プレースホルダーを使ってマニフェスト マージを行う方法を見つけました。アプリに実装しましたが、ほとんどの場合、結果に本当に満足しています-ビルドバリアントに基づいてアプリ名を変更するGradleのみのソリューション

String Resource以前は、フレーバーやビルド タイプなどのさまざまなリソースで変更したい属性を持つ文字列を 1 つだけ使用して、新しいスパースを作成する必要がありました。個人的には、その方法は本当にきれいだとは思いません。シンプルで簡単ですが、きれいではありません。

そこから、動作する以下を作成しました。しかし、私は重複したコードが好きではありませんFlavor。これは抽象化できるものですか?おそらくそれを入れることができdefaultConfigますか?

たとえば、以下のmanifestPlaceholdersコードでは、すべてのフレーバーに存在するコードを移動し、defaultConfig何らかの形で抽象化して、一度定義できるようにする方法はありますか?

android {
    ...
    ext {
        APP_NAME = "App Name"
        HUB_NAME = "Hub"
    }

    defaultConfig {
        ...
    }

    productFlavors {
        entity_1 {
            versionNameSuffix ' - Entity_1'
            applicationIdSuffix 'entity_1'
            manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
        }
        entity_2 {
            versionNameSuffix ' - Entity_2'
            applicationIdSuffix 'entity_2'
            manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
        }

        ...

        entity_n {
            versionNameSuffix ' - Entity_n'
            applicationIdSuffix 'entity_n'
            manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
        }
        hub {
            versionNameSuffix ' - Hub'
            applicationIdSuffix 'hub'
            manifestPlaceholders = [ applicationLabel: HUB_NAME ]
        }
    }

    buildTypes {
        release {
            ...
        }
    }

    applicationVariants.all { variant ->

        if (variant.buildType.name != "release") return

        if (variant.flavorName != "hub") {
            variant.mergedFlavor.manifestPlaceholders = [applicationLabel: APP_NAME]
        } 
    }

ところで、上記のコードを実行するapplicationLabelと、次のようになります。これらを使用して、ホーム画面のアプリの名前を決定します。

望ましい

Flavor     Debug App Name             Release App Name
--------   --------------             ----------------
entity_1   App Name - Entity_1_name   App Name
entity_2   App Name - Entity_2_name   App Name
...        ...                        ...
entity_n   App Name - Entity_n_name   App Name
hub        Hub                        Hub
4

1 に答える 1

1

やりたいことは簡単にできる。

問題の現在の実装では、最初に最も具体的な名前を作成しようとし、次に特定のフレーバーで不要な情報を削除しようとしていました。

反対の考え方で、最初に最も一般的な名前を作成し、次に特定のフレーバーで必要な情報を追加する必要がありました。

android {
    ...
    ext {
        APP_NAME = "App Name"
        HUB_NAME = "Hub"
    }

    defaultConfig {
        ...
        manifestPlaceholders = [ applicationLabel: APP_NAME ]
    }

    productFlavors {
        entity_1 {
            versionNameSuffix ' - Entity_1'
            applicationIdSuffix 'entity_1'
        }
        entity_2 {
            versionNameSuffix ' - Entity_2'
            applicationIdSuffix 'entity_2'
        }

        .
        .
        .

        entity_n {
            versionNameSuffix ' - Entity_n'
            applicationIdSuffix 'entity_n'
        }

        hub {
            versionNameSuffix ' - Hub'
            applicationIdSuffix 'hub'
            manifestPlaceholders = [ applicationLabel: HUB_NAME ]
        }
    }

    buildTypes {
        release {
            ...
        }
    }

// BEFORE the applicationVariants.all { ... } code runs, this is what all the applicationLabel look like. We are close, but need to ADD to them...

//     Flavor     Debug App Name             Release App Name
//    --------   --------------             ----------------
//    entity_1   App Name                   App Name
//    entity_2   App Name                   App Name
//    ...        ...                        ...
//    entity_n   App Name                   App Name
//    hub        Hub                        Hub

    applicationVariants.all { variant ->

        // Don't modify the release build or the hub flavor. They are good already.
        if (variant.buildType.name == "release" || variant.flavorName == "hub") return
        variant.mergedFlavor.manifestPlaceholders = [applicationLabel: APP_NAME + variant.mergedFlavor.versionNameSuffix]
    }

// AFTER the applicationVariants.all { ... } code runs, this is what all the applicationLabel look like. We are done!

//     Flavor     Debug App Name             Release App Name
//    --------   --------------             ----------------
//    entity_1   App Name - Entity_1_name   App Name
//    entity_2   App Name - Entity_2_name   App Name
//    ...        ...                        ...
//    entity_n   App Name - Entity_n_name   App Name
//    hub        Hub                        Hub
于 2016-06-13T10:12:48.733 に答える