Cómo generar buildConfigField con el tipo String

En mi proyecto de Android Studio hay dos build configuration con algunos 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' } } 

Estoy recibiendo y error de la siguiente manera:

 /path/to/generated/BuildConfig.java Error:(14, 47) error: ';' expected Error:(15, 47) error: ';' expected 

El BuildCofig.java generado es como sigue:

 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; } 

Creo que la APP_VERSION y SERVER_URL no se generan correctamente como tipo String que no tienen comillas.

No estoy seguro de por qué se está generando de tal manera. Por favor, hágamelo saber cómo puedo resolver estos problemas.

Los campos de configuración de generación de tipo de cadena se deben declarar así:

 buildConfigField "String", "SERVER_URL", "\"http://dev.myserver.com\"" 

El nombre del campo entre comillas, el valor del campo en las comillas reflejadas adicionalmente.

¿Por qué todo el mundo está tan enojado por escapar de las comillas dobles? Se ve feo! Esto es Groovy, chicos, solo puedes mezclar citas simples y dobles:

 buildConfigField "String", 'SERVER_URL', '"http://dev.myserver.com"' buildConfigField "String", 'APP_VERSION', '"0.0.1"' 

Escapar de sus citas de cadena:

 buildConfigField "String", 'SERVER_URL', "\"http://dev.myserver.com\"" buildConfigField "String", 'APP_VERSION', "\"0.0.1\"" 

Si al "resolver los problemas" quiere decir no tener que hacer una doble cotización literal, no me he encontrado con nada, ya que parece estar funcionando según lo diseñado.

He estado experimentando con el movimiento de los literales en " gradle.properties " como una solución, convirtiendo varias líneas feas feo en una línea fea.

Al igual que:

 buildTypes { def SERVER_URL = "SERVER_URL" def APP_VERSION = "APP_VERSION" def CONFIG = { k -> "\"${project.properties.get(k)}\"" } debug { buildConfigField "String", SERVER_URL, CONFIG("debug.server.url") buildConfigField "String", APP_VERSION, CONFIG("version") } release { buildConfigField "String", SERVER_URL, CONFIG("release.server.url") buildConfigField "String", APP_VERSION, CONFIG("version") minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 

Gradle.properties

 version=0.1.1 ... debug.server.url=http://dev.myserver.com ... release.server.url=http://myserver.com ... 

Pensamientos adicionales:


 def CONFIG = { b,k -> "\"${project.properties.get(b+'.'+k)}\"" } def CONFIG_DEBUG = { k -> CONFIG('debug',k) } def CONFIG_RELEASE = { k -> CONFIG('release',k) } 

 def CONFIG = { b,k -> "\"${project.properties.get(b+'.'+k)}\"" } def CONFIG_INT = { b,k -> "${project.properties.get(b+'.'+k)}" } ... 

Yo también estaba confundido. Pero hay un sentido – "String" define el tipo del campo, mientras que el valor del campo no se cita automáticamente para permitirnos usar expresiones aquí:

buildConfigField "String", "TEST", "new Integer(10).toString()"

De lo contrario, no sería posible.

  • Gradle-android-scala-plugin da "No se encontró el constructor que coincide con" error
  • Aceptar automáticamente todas las licencias de SDK
  • Error de compilación de Gradle (Android Studio 2.2.2)
  • ClassCastException: NoClassDefFoundError no se puede transmitir a RuntimeException
  • Android Studio: raíz VCS no registrada detectada
  • Qué es la diferencia entre compileSdkVersion 'Google Inc.:Google APIs: 23' y compileSdkVersion 23
  • Error :: archivos duplicados durante el envasado de APK
  • Error AAPT edificio gradle sin fin
  • ¿Cómo heredamos las clases de prueba en los módulos de la biblioteca de Android?
  • Android falló al cambiar el nombre del archivo aar en la compilación
  • Gradle tarea para cambiar un booleano en la compilación de configuración
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.