3 votes

Est-il possible de passer des constantes de chaîne Java au fichier Gradle?

Je suis en train d'utiliser buildConfigField pour transmettre l'adresse IP du serveur de débogage et de production ainsi que d'autres chaînes littérales dans l'application.

comme ceci :

 buildTypes {
        debug {
            buildConfigField "String", "url", "\"http:\\xxxxxxx.xx\""
        }

        release {
            buildConfigField "String", "url", "\"http:\\ppppppp.xx\""
        }
    }

Mais j'ai un problème : mon application peut communiquer avec plusieurs serveurs de test en mode débogage. Parfois je le connecte à mon adresse IP locale et si je ne suis pas au travail, je le connecte à un serveur de test distant.

Le problème que je rencontre actuellement est que je dois taper l'adresse IP entière à chaque fois que je veux modifier la configuration :

 debug {
     buildConfigField "String", "url", "\"http:\\xxxxxxx.xx\""
 }

J'ai un fichier Kotlin avec ces adresses IP déjà définies :

object API {
    const val URL_MAIN = "http://19.544...."
    const val URL_TEST_LOCAL = "http://192.16...."
    const val URL_TEST_REMOTE = "http://19.554...."
}

Y a-t-il un moyen d'accéder à cette variable via le fichier gradle au lieu de la saisir manuellement ?

Modifier : J'ai mis ces adresses URL dans une classe Kotlin car j'ai besoin d'utiliser leurs valeurs dans mon projet également.

3voto

Lakhwinder Singh Points 1996

Vous n'avez pas besoin d'utiliser des chaînes Java pour cela, les saveurs de produit sont la solution parfaite

dans votre bloc Android dans le fichier Gradle, utilisez-le comme ceci

productFlavors {

       main {
            dimension "app"
            buildConfigField 'String', 'url', 'http://XXXXXXX'
        }

      test_local {
            dimension "app"
            buildConfigField 'String', 'url', 'http://XXXXXXX'
        }

       test_remote {
            dimension "app"
            buildConfigField 'String', 'url', 'http://XXXXXXX'
        }

    }

Utilisez la section Variant de build dans le coin inférieur gauche de Android studio et choisissez quelle build vous souhaitez effectuer

1voto

Thomas Mary Points 585

Dans la racine de votre projet, créez un fichier myFile.properties :

URL_MAIN = "http://19.544...."
URL_TEST_LOCAL = "http://192.16...."
URL_TEST_REMOTE = "http://19.554...."

Ensuite :

buildTypes {
    debug  {
        Properties properties = new Properties()
        properties.load(project.rootProject.file('myFile.properties').newDataInputStream())
        buildConfigField "String", "url", properties.getProperty('URL_TEST_LOCAL')
    }

    release  {
        Properties properties = new Properties()
        properties.load(project.rootProject.file('myFile.properties').newDataInputStream())
        buildConfigField "String", "url", properties.getProperty('URL_MAIN')
    }
}

1voto

blipinsk Points 467

Une autre solution est simplement de définir ces éléments dans votre build.gradle

def API_URL_MAIN = "http://19.544...."
def API_URL_TEST_LOCAL = "http://192.16...."
def API_URL_TEST_REMOTE = "http://19.554...."

// tous vos autres éléments...

buildTypes {
    debug {
        buildConfigField "String", "url", "\"$API_URL_TEST_LOCAL\""
    }
    release {
        buildConfigField "String", "url", "\"$API_URL_MAIN\""
    }
}

(vous aurez besoin de "\"$\"" pour qu'il soit correctement construit en tant que String)

1voto

Jeel Vankhede Points 4013

Vous pouvez utiliser la classe BuildConfig qui est une classe générée automatiquement et vous fournit des variables définies par buildConfigFields dans votre fichier Gradle.

Ainsi, vous n'aurez pas besoin de changer des choses majeures mais quelques petites choses dans l'objet API comme ci-dessous :

objet API {
    const val URL_PRINCIPALE = BuildConfig.URL
}

Maintenant, définissez cette URL dans buildConfigField selon vos types de build.

buildConfigField "String", "URL", "\"http:\\xxxxxxx.xx\""

Ainsi, pour les types debug ou release, cela peut être ce que vous voulez.

1voto

Masood Points 36

Vous pouvez utiliser ProductFlavours dans votre fichier Gradle, ProductFlavours sont différentes saveurs d'une application. Vous pouvez avoir plusieurs buildConfigField dans vos saveurs qui génèrent finalement un fichier Build.config

productFlavors {

   name {
        minsdkversion 16
        targetsdkversion 26
        dimension "nom_application"
        buildConfigField 'String', 'BASE_URL', '"http://XXXXXXX"'
    }

  name1 {
        minsdkversion 16
        targetsdkversion 26
        dimension "nom_application"
        buildConfigField 'String', 'BASE_URL', '"http://XXXXXXX"'
    }

   name2 {
        minsdkversion 16
        targetsdkversion 26
        dimension "nom_application"
        buildConfigField 'String', 'BASE_URL', '"http://XXXXXXX"'
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X