studio para descargar configurar android gradle android-build android-gradle buildconfig

para - BuildConfig no se creó correctamente(Gradle Android)



gradle version android studio (4)

Estoy tratando de convertir nuestra aplicación de Android a una compilación gradle. Tengo el proyecto y sus bibliotecas construidas con éxito. Ahora estoy tratando de crear aplicaciones separadas para nuestros diversos entornos (dev / test / prod tienen diferentes URL para los servicios de descanso que consumen).

Al buscar, la mejor manera de hacerlo es haciendo diferentes BuildConfig para cada entorno. Esto es lo que intenté:

import java.util.regex.Pattern buildscript { repositories { mavenCentral() } dependencies { classpath ''com.android.tools.build:gradle:+'' } } apply plugin: ''android'' task(''increaseVersionCode'') << { def manifestFile = file("AndroidManifest.xml") def pattern = Pattern.compile("versionCode=/"(//d+)/"") def manifestText = manifestFile.getText() def matcher = pattern.matcher(manifestText) matcher.find() def versionCode = Integer.parseInt(matcher.group(1)) def manifestContent = matcher.replaceAll("versionCode=/"" + ++versionCode + "/"") manifestFile.write(manifestContent) } tasks.whenTaskAdded { task -> if (task.name == ''generateReleaseBuildConfig'') { task.dependsOn ''increaseVersionCode'' } } dependencies { compile ''com.android.support:support-v4:19.0.0'' compile files(''libs/commons-io-2.4.jar'', ''libs/google-play-services.jar'', ''libs/gson-2.2.4.jar'', ''libs/universal-image-loader-1.8.6.jar'', ''libs/wakeful-1.0.1.jar'') compile project('':pulltorefresh_lib'') compile project('':edgeeffect_lib'') compile project('':viewpagerindicator_lib'') } android { buildToolsVersion "18.1.1" compileSdkVersion "Google Inc.:Google APIs:18" defaultConfig { minSdkVersion 14 targetSdkVersion 18 } buildTypes { debug { packageNameSuffix ".debug" } dev.initWith(buildTypes.debug) dev { buildConfigField "String", "URL_SEARCH", "/"https://dev-search.example.com/";" buildConfigField "String", "URL_CONNECT", "/"https://dev-connect.example.com/";" buildConfigField "String", "URL_SVC_NEWSLIST", "/"https://dev-mobilenews.example.com/newslist/";" buildConfigField "String", "URL_SVC_NEWSDETAIL", "/"https://dev-mobilenews.example.com/newsdetail/";" buildConfigField "String", "URL_SVC_REGISTERENDPOINTS", "/"https://dev-mobilenews.example.com/registerendpoints/";" } prod.initWith(buildTypes.release) prod { buildConfigField "String", "URL_SEARCH", "/"https://search.example.com/";" buildConfigField "String", "URL_CONNECT", "/"https://connect.example.com/";" buildConfigField "String", "URL_SVC_NEWSLIST", "/"https://mobilenews.example.com/newslist/";" buildConfigField "String", "URL_SVC_NEWSDETAIL", "/"https://mobilenews.example.com/newsdetail/";" buildConfigField "String", "URL_SVC_REGISTERENDPOINTS", "/"https://mobilenews.pdc-np-cf.lmig.com/registerendpoints/";" } } sourceSets { main { manifest.srcFile ''AndroidManifest.xml'' java.srcDirs = [''src''] resources.srcDirs = [''src''] res.srcDirs = [''res''] assets.srcDirs = [''assets''] } } }

El problema es que mi BuildConfig.java no parece obtener las variables estáticas inyectadas, por lo tanto, recibo errores similares a los siguientes:

/Users/path/to/project/MainActivity.java:348: error: cannot find symbol startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(BuildConfig.URL_SEARCH))); ^ symbol: variable URL_SEARCH location: class BuildConfig /Users/path/to/project/MainActivity.java:359: error: cannot find symbol startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(BuildConfig.URL_CONNECT))); ^ symbol: variable URL_CONNECT location: class BuildConfig /Users/path/to/project/MainActivity.java:600: error: cannot find symbol HttpPost httpPost = new HttpPost(BuildConfig.URL_SVC_REGISTERENDPOINTS); ^ symbol: variable URL_SVC_REGISTERENDPOINTS location: class BuildConfig /Users/path/to/project/service/AlarmNotificationService.java:145: error: cannot find symbol String requestUrl = BuildConfig.URL_SVC_NEWSLIST + "?" ^ symbol: variable URL_SVC_NEWSLIST location: class BuildConfig /Users/path/to/project/service/NewsService.java:240: error: cannot find symbol String requestUrl = BuildConfig.URL_SVC_NEWSLIST + "?" ^ symbol: variable URL_SVC_NEWSLIST location: class BuildConfig /Users/path/to/project/service/NewsService.java:530: error: cannot find symbol HttpPost httpPost = new HttpPost(BuildConfig.URL_SVC_NEWSDETAIL); ^ symbol: variable URL_SVC_NEWSDETAIL location: class BuildConfig 6 errors

Mi archivo build / source / buildConfig / debug / com /.../ BuildConfig.java contiene:

/** * Automatically generated file. DO NOT MODIFY */ package com....; public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String PACKAGE_NAME = "com.....debug"; public static final String BUILD_TYPE = "debug"; public static final String FLAVOR = ""; public static final int VERSION_CODE = 5; }

¿Qué estoy haciendo mal?


En caso de que eso ayude a otra persona, en mi caso fue una importación faltante: import uk.co.yourpackage.yourapp.BuildConfig;

De alguna manera, en ninguna parte del documento menciona que necesitas incluirlo. Me hizo pensar que se importó automáticamente de alguna manera, pero NO LO ES. no para mí, al menos ... Tanto tiempo perdido ... ¡Espero que eso ayude a otro novato como yo!


Por favor, asegúrese de estar construyendo la variante "dev" o "prod". No hay definición de BuildConfig en la variante "depuración" y "versión" predeterminada. En Android Studio, puede seleccionar la variante actual en la esquina inferior izquierda:

Para simplificar su archivo build.gradle, puede definir:

buildTypes { debug { buildConfigField "String", "URL_SEARCH", "/"https://dev-search.example.com/"" // etc. } release { buildConfigField "String", "URL_SEARCH", "/"https://search.example.com/"" // etc. } }

y luego simplemente use las variantes predeterminadas de "depuración" y "liberación".

Por último, elimine el punto y coma (signo: '';'') del valor del parámetro buildConfigField.


Tuve el mismo problema y lo solucioné a continuación:

buildConfigField ''String'', ''BASE_URL'', ''"https://api.example.com"''


Tuve un problema similar relacionado con la configuración de tipos de compilación utilizando .initWith (someotherbuildtype), BuildConfig no se creó correctamente. Tuve que cambiar a la variante de compilación primaria y compilarla primero, luego los tipos de compilación que inician con el padre se crearon bien.