Правильный способ добавить разные конфигурации для разных типов сборки и вкусов продукта - PullRequest
0 голосов
/ 09 февраля 2020

В моем приложении у меня есть 4 среды: Dev , SIT , UAT , Release . Для каждой среды у меня есть тип сборки со своей конфигурацией. Очень похоже на предложенный способ, например:

buildTypes {
    Dev {
        buildConfigField "String", 'BASE_URL', "https://dev-api.yourbackend.com"
    }
    SIT {
        buildConfigField "String", 'BASE_URL', "https://sit-api.yourbackend.com"
    }
    UAT {
        buildConfigField "String", 'BASE_URL', "https://uat-api.yourbackend.com"
    }
    Release {
        buildConfigField "String", 'BASE_URL', "https://api.yourbackend.com"
    }
}

Но теперь у меня есть 5-6 различных таких конфигураций, а не только BASE_URL. Как и ClientId, ClientSecret et c ..

Плюс У меня есть 2 варианта продукта, что означает, что мне нужно создать 8 различных вариантов сборки и иметь все эти 5-6 конфигураций внутри каждого такого варианта. Все, что выглядит неуклюже.

1 другое решение, которое я нашел, - это создать папку для каждого варианта сборки, например flavour1Dev, flavour2Sit, flavour2Uat et c .. и иметь файл конфигурации укажите c для этого варианта в этой папке. Это снова включает в себя 8 различных папок и продолжает расти по мере добавления новых сред.

Есть ли лучший способ справиться с этим, вероятно, как файл config.gradle, где я могу иметь только эти конфигурации и импортировать их обратно в app/build.gradle, способ модульной конфигурации всех вариантов сборки.

Update-1

Я пробовал это согласно @Md. Ответ Асадуззамана:

build.gradle

…
…
apply from: './config.gradle'


…
…
android {
    …
    …
    defaultConfig {
        …
        …
        buildConfigField('String', ‘BASE_URL’, '"https://default.yourbackend.com”')
    }
    …
    …
}

config.gradle

android {
    buildTypes {
        dev {
            buildConfigField('String', ‘BASE_URL’, '"https://dev.yourbackend.com”')
        }
        sit {
            buildConfigField('String', ‘BASE_URL’, '"https://sit.yourbackend.com”')
        }
    }
}

Проблема в том, что в сгенерированный BuildConfig, я все еще вижу значения по умолчанию:

public static final String BASE_URL = "https://default.yourbackend.com";

1 Ответ

0 голосов
/ 09 февраля 2020

Вы уже упомянули решение, создав отдельный файл config.gradle. Я пытаюсь реализовать это, как показано ниже:

Шаг - 1: Создайте config.gradle внутри вашей папки app и добавьте все конфигурации.

android {

    buildTypes {

        Dev {
            buildConfigField "String", 'BASE_URL', "https://dev-api.yourbackend.com"
        }

        SIT {
            buildConfigField "String", 'BASE_URL', "https://sit-api.yourbackend.com"
        }

        UAT {
            buildConfigField "String", 'BASE_URL', "https://uat-api.yourbackend.com"
        }

        Release {
            buildConfigField "String", 'BASE_URL', "https://api.yourbackend.com"
        }
    }

    productFlavors {
        flavor1 {
            /*implementation*/
        }

        flavor2 {
            /*implementation*/
        }

        flavor3 {
            /*implementation*/
        }
    }
}

Шаг -2: Включите config.gradle в свой app/build.gradle.

apply plugin: 'com.android.application'
apply from: './config.gradle'

....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...