462 Stimmen

Ist es möglich, in Gradle eine Variable zu deklarieren, die in Java verwendbar ist?

Ist es möglich, eine Variable in Gradle zu deklarieren, die in Java verwendet werden kann? Ich möchte im Grunde einige Variablen in der build.gradle deklarieren und diese dann zur Build-Zeit (offensichtlich) abrufen. Genau wie Präprozessor-Makros in C/C++...

Ein Beispiel für eine Deklaration könnte so aussehen ... :

android {
    debug {
        A_VAR_RETRIEVABLE_IN_JAVA = 42
    }
    release {
        A_VAR_RETRIEVABLE_IN_JAVA = 42+52
    }
}

Gibt es eine Möglichkeit, so etwas zu tun?

4voto

Hitesh sapra Punkte 260

Ich benutze diesen Code und er funktioniert sehr gut.

def baseUrl = '\"http://patelwala.com/myapi/"'
def googleServerKey = '\"87171841097-opu71rk2ps35ibv96ud57g3ktto6ioio.apps.googleusercontent.com"'
android {
  buildTypes {
  release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'String', 'BASE_URL', baseUrl
        buildConfigField 'String', 'web_client_id', googleServerKey
    }
    releasedebug {
        initWith debug
        buildConfigField 'String', 'BASE_URL', baseUrl
        buildConfigField 'String', 'web_client_id' ,googleServerKey
    }
    debug {

        buildConfigField 'String', 'BASE_URL', baseUrl
        buildConfigField 'String', 'web_client_id', googleServerKey
    }
 }
}

}

4voto

Rickard Elimää Punkte 6424

Keine der obigen Antworten hat mir Richtlinien gegeben, also musste ich zwei Stunden damit verbringen, über Groovy-Methods zu lernen.

Ich wollte in der Lage sein, gegen eine Produktions-, Sandbox- und lokale Umgebung anzutreten. Weil ich faul bin, wollte ich die URL nur an einer Stelle ändern. Hier ist, was ich herausgefunden habe:

 flavorDimensions 'environment'
    productFlavors {
        production {
            def SERVER_HOST = "evil-company.com"
            buildConfigField 'String', 'API_HOST', "\"${SERVER_HOST}\""
            buildConfigField 'String', 'API_URL', "\"https://${SERVER_HOST}/api/v1/\""
            buildConfigField 'String', 'WEB_URL', "\"https://${SERVER_HOST}/\""
            dimension 'environment'
        }
        rickard {
            def LOCAL_HOST = "192.168.1.107"
            buildConfigField 'String', 'API_HOST', "\"${LOCAL_HOST}\""
            buildConfigField 'String', 'API_URL', "\"https://${LOCAL_HOST}/api/v1/\""
            buildConfigField 'String', 'WEB_URL', "\"https://${LOCAL_HOST}/\""
            applicationIdSuffix ".dev"
        }
    }

Alternative Syntax, weil in Groovy-Methods nur ${variable} mit doppelten Anführungszeichen verwendet werden können.

    rickard {
        def LOCAL_HOST = "192.168.1.107"
        buildConfigField 'String', 'API_HOST', '"' + LOCAL_HOST + '"'
        buildConfigField 'String', 'API_URL', '"https://' + LOCAL_HOST + '/api/v1/"'
        buildConfigField 'String', 'WEB_URL', '"https://' + LOCAL_HOST + '"'
        applicationIdSuffix ".dev"
    }

Was für mich schwer zu verstehen war, ist, dass Zeichenketten als Zeichenketten in Anführungszeichen deklariert werden müssen. Aufgrund dieser Beschränkung konnte ich nicht direkt auf die Referenz API_HOST zugreifen, was ich eigentlich tun wollte.

3voto

Marc Punkte 1079

Ich benutze

buildTypes.each {
    it.buildConfigField 'String', 'GoogleMapsApiKey', "\"$System.env.GoogleMapsApiKey\""
}

Es basiert auf Dennis Antwort aber holt es sich aus einer Umgebungsvariable.

3voto

anil Punkte 1981

Wie können Sie das String-Ergebnis der Funktion in buildConfigField einfügen

Hier ist ein Beispiel für das Datum des Builds im menschenlesbaren Format:

def getDate() {
    return new SimpleDateFormat("dd MMMM yyyy", new Locale("ru")).format(new Date())
}

def buildDate = getDate()

defaultConfig {
    buildConfigField "String", "BUILD_DATE", "\"$buildDate\""
}

2voto

Rahul Shyokand Punkte 725

https://stackoverflow.com/a/17201265/12021422 Antwort von @rciovati funktioniert

Aber stellen Sie sicher, dass Sie das Projekt neu erstellen, um den Fehler aus dem Android Studio IDE zu entfernen

Ich habe 30 Minuten damit verbracht zu versuchen herauszufinden, warum die neuen Eigenschaftsvariablen nicht zugänglich sind.

Wenn das "Projekt erstellen" wie rot markiert nicht funktioniert, versuchen Sie den "Projekt neu erstellen" Button wie grün markiert.

Geben Sie hier eine Bildbeschreibung ein

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X