W moim Android Studio
projekcie są dwa build configuration
z kilkoma 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'
}
}
Otrzymuję i błąd w następujący sposób:
/path/to/generated/BuildConfig.java
Error:(14, 47) error: ';' expected
Error:(15, 47) error: ';' expected
generowany BuildConfig.java
jest następujący:
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;
}
Myślę, że APP_VERSION
i SERVER_URL
nie są generowane poprawnie, ponieważ są typu String, nie mają cudzysłowów.
Nie jestem pewien, dlaczego jest generowany w taki sposób. Daj mi znać, jak mogę rozwiązać ten problem.
android
android-gradle-plugin
Abdullah
źródło
źródło
buildConfigField "String", APP_VERSION, ' "0.0.1" '
(oczywiście bez spacji)Odpowiedzi:
Pola konfiguracji budowania typu ciągowego należy zadeklarować w następujący sposób:
nazwa pola w cudzysłowie, dodatkowo wartość pola w cudzysłowie.
źródło
SERVER_URL
w cudzysłowie. Wiedziałbyś o tym, gdybyś spróbował sam przed komentarzem. Komunikat o błędzie toError:(32, 0) Could not find property 'SERVER_URL' on BuildType_...
def FIELD_NAME = "SERVER_URL"
ibuildConfigField "boolean", FIELD_NAME, "false"
dobrze ze sobą współpracować. Jeśli brakuje definicji SERVER_URL, nastąpi awaria, prawdopodobnie to właśnie robisz źle.Dlaczego wszyscy tak szaleni unikają podwójnych cudzysłowów? Wygląda brzydko! To jest Groovy, chłopaki, możecie po prostu mieszać pojedyncze i podwójne cudzysłowy:
źródło
Jeśli przez „rozwiązywanie problemów” masz na myśli brak konieczności podwójnego cytowania literałów, nie znalazłem niczego, ponieważ wydaje się, że działa zgodnie z założeniami.
Eksperymentowałem z przeniesieniem literałów do „ gradle.properties ” jako obejściem, zamieniając potencjalnie wiele brzydkich wierszy w jeden brzydki wiersz.
Tak jak to:
gradle.properties
Dalsze przemyślenia:
źródło
CONFIG = { k -> if (project.properties.containsKey(k)) "\"${project.properties.get(k)}\"" else throw new RuntimeException("No such variable: " + k) }
Ja też byłem zdezorientowany. Ale ma sens - „String” definiuje typ pola, podczas gdy wartość pola nie jest automatycznie cytowana, abyśmy mogli użyć tutaj wyrażeń:
buildConfigField "String", "TEST", "new Integer(10).toString()"
W przeciwnym razie nie byłoby to możliwe.
źródło
Uniknij cudzysłowów:
źródło
Posługiwać się
dla zmiennej. Odniesienie stąd
źródło
w aplikacji build.gradle
następnie w BuildConfig
źródło
Tylko \ "
my stuff
\" działało dla mnie. I mam w sobie różne dziwne postaciemy stuff
.źródło