如何用Stringtypes生成buildConfigField

在我的Android Studio项目中有一些buildConfigField build configuration

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

我得到和错误如下:

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

生成的BuildCofig.java如下所示:

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

我认为APP_VERSIONSERVER_URL没有得到正确的作为stringtypes,他们没有引号。

我不知道为什么它是以这种方式产生的。 请让我知道如何解决这个问题。

stringtypes的构buildconfiguration字段应该像这样声明:

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

引号中的字段名称,镜像报价中的字段值。

为什么每个人都疯狂地逃避双引号? 看起来很丑! 这是Groovy,伙计们,你可以混合使用单引号和双引号:

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

如果说“解决问题”的意思是不用加双引号,我还没有碰到任何事情,因为它似乎是按照devise工作的。

我一直在尝试将文字移动到“ gradle.properties ”作为一种解决方法,将潜在的多条丑陋的线条变成一条不合格的线条。

像这样:

 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 ... 

更多的想法:


 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)}" } ... 

转义您的string引号:

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

我也很困惑。 但有一个意义 – “string”定义字段的types,而字段值不会自动引用,以便让我们在这里使用expression式:

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

否则,这是不可能的。