Android Gradle. Как совместить Flavors с buildTypes - PullRequest
0 голосов
/ 15 января 2019

Я работаю над приложением белого бренда.

Мы создаем разные варианты для каждого клиента, и у каждого клиента есть API Debug и Production, поэтому я пытаюсь настроить их в Gradle.

Как мне это сделать?

Вот что я пробовал:

buildTypes {
    debug {
        // some configurations
    }
    release {
        // some configurations
    }
}

flavorDimensions "client"
productFlavors {
    company1{
        dimension "client"
        buildConfigField("String", "BASE_URL", "\"https://app.company1/devApi/\"")
    }

    company2 {
        dimension "client"
        buildConfigField("String", "BASE_URL", "\"https://app.company2/devApi/\"")
    }
}

EDIT: Я хотел бы иметь возможность определять разные BASE_URL для каждого Flavor и Buildtype.

Аромат компании1, отладка BuildType

https://app.company1.com/devApi/

Аромат компании1, выпуск BuildType

https://app.company1.com/prodApi/

Аромат компании2, отладка BuildType

https://dev.company2.com/api/

Аромат компании2, выпуск BuildType

https://prod.company2.com/api/

Ответы [ 5 ]

0 голосов
/ 04 марта 2019

Для моей конкретной проблемы, когда URL-адреса сильно отличаются друг от друга, я не мог заставить его работать с Flavors и BuildTypes.

Я смог определить отладочные / рабочие URL-адреса, используя конкретные strings.xml для каждого типа / сборки:

Это структура папок для этого:

src/flavour1/debug/res/values/strings.xml 
src/flavour1/res/values/strings.xml 

и

src/flavour2/debug/res/values/strings.xml 
src/flavour2/res/values/strings.xml 

EXTRA: Это также может быть использовано для размещения различных google-services.json файлов

0 голосов
/ 15 января 2019

Попробуйте что-то вроде этого:

buildTypes {
    debug {
        buildConfigField("String", "BASE_URL_PATH", "\"devApi/\"")
    }
    release {
        buildConfigField("String", "BASE_URL_PATH", "\"prodApi/\"")
    }
}

flavorDimensions "client"
productFlavors {
    company1{
        dimension "client"
        buildConfigField("String", "BASE_URL_DOMAIN", "\"https://app.company1/\"")
    }

    company2 {
        dimension "client"
        buildConfigField("String", "BASE_URL_DOMAIN", "\"https://app.company2/\"")
    }
}

И используйте это как:

String BASE_URL = BuildConfig.BASE_URL_DOMAIN + BuildConfig.BASE_URL_PATH

0 голосов
/ 15 января 2019

Вот рабочий пример

// Указывает одно измерение вкуса.

flavorDimensions "version"

  productFlavors {
    srilanka {
      dimension "version"
      applicationId "com.example.lk"
      versionCode 1
      versionName "1.0.1"
      buildConfigField("String", "COUNTRY", "\"LK\"")
    }

india {
  dimension "version"
  applicationId "com.example.in"
  versionCode 1
  versionName "1.0.1"
  buildConfigField("String", "COUNTRY", "\"IN\"")

}
other {
  dimension "version"
  applicationId "com.example.other"
  versionCode 1
  versionName "1.0.1"
  buildConfigField("String", "COUNTRY", "\"OTHER\"")

}
}


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

вы можете получить к нему доступ вот так

String country =BuildConfig.COUNTRY;
0 голосов
/ 15 января 2019

Ваша основная проблема заключается в том, что вы неправильно размещаете свои buildTypes для вкусов и правильных параметров внутри каждой компании, а также я предлагаю вам прочитать больше о настройках Gradle ( developer.android ).

    buildTypes {
        debug {
            // some configurations
        }
        release {
            // some configurations
        }
    }

    flavorDimensions "version", "brand"
    productFlavors {
        dev {
            versionName += "dev"
            dimension "version"

            buildConfigField "String", "BASE_API_URL", "\...\""
        }

        prod {
            dimension "version"

            buildConfigField "String", "BASE_API_URL", "\...\""
        }
        company1{
            dimension "brand"
            versionName "1.0.0"
            buildConfigField("int", "CLONE_ID", "1")
            **here you can set some params, for current clone id: examlpe ->** buildConfigField("boolean", "SHOW_CREDIT_BUY_IN_PROFILE", "true")
        }

        company2 {
            dimension "brand" 
            versionName "1.0.0"
            buildConfigField("int", "CLONE_ID", "2")
            **here you can set some params, for current clone id: examlpe ->** buildConfigField("boolean", "SHOW_CREDIT_BUY_IN_PROFILE", "false")


    }
0 голосов
/ 15 января 2019

Вы можете использовать разновидности для добавления базовых конфигураций для вашего приложения, которые варьируются от app url, API keys, master password и т. Д.

flavorDimensions "Mobile"
     productFlavors {
        Production {
            dimension "Mobile"   // dimension can be mobile, kiosks, tv, miniKiosks etc

            resValue "string", "API_KEY", "Just to give the idea"
            resValue "string", "SERVICE_IP", "Your service IP"
            resValue "string", "SERVICE_BASE_URL", ""
            resValue "string", "APK_BASE_URL", "base url"
            resValue "string", "MASTER_PASSWORD", ""

        }
        Demo {
            dimension "Mobile"

            resValue "string", "API_KEY", "Just to give the idea"
            resValue "string", "SERVICE_IP", "Your service IP"
            resValue "string", "SERVICE_BASE_URL", "services/v1/"
            resValue "string", "APK_BASE_URL", "base url"
            resValue "string", "MASTER_PASSWORD", ""
        }

    Local {
            dimension "Mobile"

            resValue "string", "API_KEY", ""
//            resValue "string", "app_name", ""
            resValue "string", "SERVICE_IP", ""
//            resValue "string", "SERVICE_IP", ""
            resValue "string", "SERVICE_BASE_URL", ""
            resValue "string", "APK_BASE_URL", ""
            resValue "string", "MASTER_PASSWORD", "a"
        }
    }

Теперь, если вы проверите по своему build varients, вы получите что-то вроде этого:

enter image description here

...