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:
- Ejecutar "Ejecutar instantáneamente" desde la línea de comandos
- Gradle Build ejecutándose en Android Studio durante demasiado tiempo
- Cómo resolver java.util.zip.ZipException entrada duplicada: com / google / gson / annotations / Expose.class?
- Android: Cómo usar menor minSdkVersion que declarado en la biblioteca (uiautomator-v18)
- Herramientas: reemplazar no reemplazar en el manifiesto de Android
/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.
- Usar Proguard sólo para deshabilitar el registro y para reducir recursos
- No se puede ver el árbol de dependencias con gradlew OR gradle
- Firma de configuración por sabor no funciona
- Clase WebRTC duplicada en android
- No se puede eliminar el directorio en Android Studio
- Android Gradle 1.0 Computación Código de la versión en configuración multi-sabor
- Android Studio Gradle falla durante la compilación
- Cómo disminuir React-Native Android tamaño de la aplicación
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.
- ¿Cuál es el equivalente de "android: fontFamily =" sans-serif-light "en código Java?
- ¿Cómo puedo implementar la barra de acción personalizada con botones personalizados en Android?