Dans mon Android Studio
projet, il y en a deux build configuration
avec certains 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'
}
}
Je reçois une erreur comme suit:
/path/to/generated/BuildConfig.java
Error:(14, 47) error: ';' expected
Error:(15, 47) error: ';' expected
le généré BuildConfig.java
est le suivant:
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;
}
Je pense que les APP_VERSION
et SERVER_URL
ne sont pas générés correctement en tant que type de chaîne, ils n'ont pas de guillemets.
Je ne sais pas pourquoi il est généré de cette manière. Veuillez me faire savoir comment puis-je résoudre ces problèmes.
android
android-gradle-plugin
Abdullah
la source
la source
buildConfigField "String", APP_VERSION, ' "0.0.1" '
(sans espaces bien sûr)Réponses:
Les champs de configuration de construction de type chaîne doivent être déclarés comme ceci:
le nom du champ entre guillemets, la valeur du champ entre guillemets en plus.
la source
SERVER_URL
guillemets. Vous le sauriez si vous l'essayez vous-même avant de commenter. Le message d'erreur estError:(32, 0) Could not find property 'SERVER_URL' on BuildType_...
def FIELD_NAME = "SERVER_URL"
etbuildConfigField "boolean", FIELD_NAME, "false"
fonctionnent très bien ensemble. Si vous manquez la définition de SERVER_URL, vous planterez, c'est probablement ce que vous faites mal.Pourquoi tout le monde est-il si fou d'échapper aux guillemets? Ça a l'air moche! C'est Groovy, les gars, vous pouvez simplement mélanger des guillemets simples et doubles:
la source
Si par "résoudre les problèmes" vous voulez dire ne pas avoir à double guillemets littéraux, je n'ai rien trouvé car il semble fonctionner comme prévu.
J'ai expérimenté le déplacement des littéraux dans " gradle.properties " comme solution de contournement, transformant potentiellement plusieurs lignes laides en une ligne laide.
Ainsi:
gradle.properties
Autres réflexions:
la source
CONFIG = { k -> if (project.properties.containsKey(k)) "\"${project.properties.get(k)}\"" else throw new RuntimeException("No such variable: " + k) }
J'étais également confus. Mais il y a un sens - "String" définit le type du champ, alors que la valeur du champ n'est pas automatiquement citée afin de nous permettre d'utiliser des expressions ici:
buildConfigField "String", "TEST", "new Integer(10).toString()"
Sinon, ce ne serait pas possible.
la source
Échappez vos guillemets de chaîne:
la source
Utilisation
pour variable. Référence d' ici
la source
dans l'application build.gradle
puis dans BuildConfig
la source
Seul \ "
my stuff
\" fonctionnait pour moi. Et j'ai toutes sortes de personnages étrangesmy stuff
.la source