In meinem Android Studio
Projekt gibt es zwei build configuration
mit einigen buildConfigField
:
buildTypes {
def SERVER_URL = "SERVER_URL"
def APP_VERSION = "APP_VERSION"
debug {
buildConfigField "String", SERVER_URL, "http://dev.myserver.com"
buildConfigField "String", APP_VERSION, "0.0.1"
}
release {
buildConfigField "String", SERVER_URL, "https://myserver.com"
buildConfigField "String", APP_VERSION, "0.0.1"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Ich bekomme und Fehler wie folgt:
/path/to/generated/BuildConfig.java
Error:(14, 47) error: ';' expected
Error:(15, 47) error: ';' expected
Das erzeugte BuildConfig.java
ist wie folgt:
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.mycuteoffice.mcoapp";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
// Fields from build type: debug
public static final String APP_VERSION = 0.0.1;
public static final String SERVER_URL = http://dev.mycuteoffice.com;
}
Ich denke, die APP_VERSION
und SERVER_URL
werden nicht richtig generiert, da sie als String-Typ keine Anführungszeichen haben.
Ich bin mir nicht sicher, warum es so erzeugt wird. Bitte lassen Sie mich wissen, wie ich dieses Problem beheben kann.
android
android-gradle-plugin
Abdullah
quelle
quelle
buildConfigField "String", APP_VERSION, ' "0.0.1" '
(natürlich ohne Leerzeichen)Antworten:
Build-Konfigurationsfelder vom Typ String sollten wie folgt deklariert werden:
der Feldname in Anführungszeichen, der Feldwert in Anführungszeichen zusätzlich.
quelle
SERVER_URL
Anführungszeichen setzen. Sie würden es wissen, wenn Sie es selbst versuchen würden, bevor Sie einen Kommentar abgeben. Die Fehlermeldung istError:(32, 0) Could not find property 'SERVER_URL' on BuildType_...
def FIELD_NAME = "SERVER_URL"
undbuildConfigField "boolean", FIELD_NAME, "false"
gut zusammenarbeiten. Wenn Sie die Definition von SERVER_URL vermissen, stürzen Sie ab, wahrscheinlich machen Sie das falsch.Warum sind alle so verrückt danach, doppelten Anführungszeichen zu entkommen? Sieht hässlich aus! Das ist Groovy, Leute, ihr könnt einfach einfache und doppelte Anführungszeichen mischen:
quelle
Wenn Sie mit "Lösen der Probleme" meinen, dass Sie Literale nicht doppelt zitieren müssen, bin ich auf nichts gestoßen, da es wie geplant zu funktionieren scheint.
Ich habe damit experimentiert, die Literale in " gradle.properties " zu verschieben als " zu verschieben und möglicherweise mehrere hässliche Zeilen in eine hässliche Zeile .
Wie so:
gradle.properties
Weitere Gedanken:
quelle
CONFIG = { k -> if (project.properties.containsKey(k)) "\"${project.properties.get(k)}\"" else throw new RuntimeException("No such variable: " + k) }
Ich war auch verwirrt. Aber es gibt einen Sinn - "String" definiert den Feldtyp, während der Feldwert nicht automatisch in Anführungszeichen gesetzt wird, damit wir hier Ausdrücke verwenden können:
buildConfigField "String", "TEST", "new Integer(10).toString()"
Sonst wäre es nicht möglich.
quelle
Entfliehen Sie Ihren Zeichenfolgen:
quelle
Verwenden
für Variable. Referenz von hier
quelle
in der App build.gradle
dann in BuildConfig
quelle
Nur "
my stuff
" hat bei mir funktioniert. Und ich habe alle möglichen seltsamen Charaktere dabeimy stuff
.quelle