5

と に基づいてアプリに別の名前を付けられるように、gradle ファイルを変更しようとしていFlavorますBuild Typeこれまでのところ、 Android Gradle Plugin Docsの手法をFlavor使用して、ベースの命名を簡潔にすることに成功しています。Manifest Merging

現時点の

これらは、私のホーム画面debugreleaseビルドの両方のアプリケーションの名前です。

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

近いけど…

望ましい

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

debugこれが欲しいので、ホーム画面でどのフレーバーがどれであるかがわかります。ユーザーは自分のデバイスに 1 つしか持っていないので、フレーバーを区別することは気にしませんrelease(複数持つことは可能かもしれませんが、私は気にしません)。

Gradle の拡張性を考えると、これは可能だと思います。ただし、私は高度な Gradle ユーザーではありません。

では、目的の出力を得るためにコードを簡潔に (可能な限り) 拡張するにはどうすればよいでしょうか?

注: 上記の表はversionNameSuffix、アプリ名の接尾辞として使用されています。ただし、デバッグ ビルド タイプでのみ使用しているフレーバーを判別できるようにするものであれば何でもかまいません (別の追加変数??)。

非目標

  • Android/Gradle: App name based on build type *and* product フレーバーString Resourceへの回答のように、ソリューションには興味がありません。純粋な Gradle ベースのソリューションが推奨されます。

  • Manifest Merger私が現在実装している方法から離れることには興味がありません。https://stackoverflow.com/a/28465883/2333021の答えは、私がすでに行ったことを実装する別の方法であり、デバッグビルドでのみこれを行うことを許可していません(私が見ることができる.そうであれば、それから私に知らせてください)。

コード

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "..."
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        manifestPlaceholders = [ applicationLabel:"App Name"]
    }

    productFlavors {
        entity_1 {
            versionNameSuffix ' - Entity_1_name'
            applicationIdSuffix 'entity_1'
        }
        entity_2 {
            versionNameSuffix ' - Entity_2_name'
            applicationIdSuffix 'entity_2'
        }
        hub {
            versionNameSuffix ' - Hub'
            applicationIdSuffix 'hub'
            manifestPlaceholders = [ applicationLabel:"Hub" ]
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

マニフェスト

<manifest ...>

    <application
        ...
        android:label="${applicationLabel}"
        ... >

アップデート

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

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

    defaultConfig {
        applicationId "..."
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

    productFlavors {
        one_million {
            versionNameSuffix ' - Entity_1'
            applicationIdSuffix 'entity_1'
            manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
        }
        udacity {
            versionNameSuffix ' - Entity_2'
            applicationIdSuffix 'entity_2'
            manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
        }
        hub {
            versionNameSuffix ' - Hub'
            applicationIdSuffix 'hub'
            manifestPlaceholders = [ applicationLabel: HUB_NAME ]
        }
    }

    buildTypes {
        release {
            manifestPlaceholders = [ applicationLabel: APP_NAME ]
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

新しい出力

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                        App Name          <- Issue (Release)
4

2 に答える 2