如何用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_VERSION
和SERVER_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()"
否则,这是不可能的。
- Android Logcat中的GC_FOR_MALLOC,GC_EXPLICIT和其他GC_ *是什么意思?
- 用Phonegap创build一个Android服务? (即使在closures的情况下也可以运行phonegap应用
- 你如何在Android上创build首选项活动和偏好片段?
- RecyclerView:检测到不一致。 无效的项目位置
- EGL_emulation无法build立连接到主机 – 安卓
- 如何更改TextInputLayout的浮动标签颜色
- 如何为Spinner的下拉菜单设置不同的主题?
- 在Android上使用Java呈现PDF文件
- 如何保持多层的ImageViews,并保持最大的纵横比?