当前位置: 首页 > 知识库问答 >
问题:

如何使用String类型生成BuildConfigField

阚允晨
2023-03-14

在我的Android Studio项目中,有两个构建配置和一些构建配置字段

    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

生成的BuildConfig.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_版本SERVER_URL没有正确生成,因为它们是字符串类型,没有引号。

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

共有3个答案

濮阳安澜
2023-03-14

如果你所说的“解决问题”是指不需要重复引用字面意思,我还没有遇到任何事情,因为它似乎是按设计工作的。

我一直在尝试将文字移到“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'
}
}

格雷德尔。属性

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)}" }
...
高奇
2023-03-14

为什么每个人都对逃避双引号如此生气?看起来很难看!这是Groovy,伙计们,你们可以混合单引号和双引号:

buildConfigField "String", 'SERVER_URL', '"http://dev.myserver.com"'
buildConfigField "String", 'APP_VERSION', '"0.0.1"'
元望
2023-03-14

字符串类型生成配置字段的声明如下:

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

引号中的字段名,以及转义引号中的字段值。

 类似资料:
  • 我们有JAVA gradle avro插件(davidmc24/gradle avro-plugin)生成施玛篇,并使用默认的stringType字符串,它将生成JAVA POJO如下: 然后我们使用相同的avdl文件来生成C#包,我们的解决方案是首先用avro-tools-1.9.1.jar生成avsc文件,这样就会生成avsc 我们有一个C#producer和java consumer,在这种

  • 我有这个打字代码: 给我以下错误: 严重性代码描述项目文件行抑制状态错误构建:“字符串|1”类型的参数不能分配给“字符串”类型的参数。 有人能帮我吗?我刚刚升级到新版本的Typescript,这条消息现在出现在多个地方。当我将鼠标悬停在categoryColumnWide上时,它显示这是一个“数字” 据我所知,我使用的是Typescript 2.1

  • 我使用的是Fast erxml json框架2.2.0版,以便在我正在开发的应用程序的API的json中创建模式。 我的API类似于:https://gist.github.com/nemo83/5555249 客户和订单都引用了地址。现在,当我尝试生成架构(https://github.com/FasterXML/jackson-module-jsonSchema)时,结果是: {"type":

  • OpenAPI3.0规范规定,没有任何类型的模式将匹配任何数据类型。 没有类型的模式匹配任何数据类型--数字、字符串、对象等等。 因此,对此进行建模的正确方法是下面的Swagger定义,其中没有属性: 但是,每个开放问题Swagger-core#3834,Java值都映射到OpenAPI类型,而不是任意类型。如上所述,这意味着这样的API返回或接受不是OpenAPI的类型是不正确的,例如、、等。

  • 我正在使用openapi生成器生成typescript获取。我喜欢使用openapi生成器,因为它支持DTO作为查询参数,如果我有10个这样的查询参数,则会将方法生成为RequestDto。这太棒了,想象一下有10个参数并排作为方法输入,噩梦。无论如何,这很好,但当你这样使用它时: java-jar-openapi-generator-cli-4.0.3。jar生成-i/swagger-spec.

  • 我有2个文件,一个ecore实现元模型和一个电子存储库。电子存储库以EMF格式与ecore实现元模型一起提供。我想浏览这个存储库的内容,我所知道的是我必须从实现元模型生成一个Eclipse插件,通过这个插件,我可以打开存储库并浏览它的内容。但我不知道如何生成插件并继续它。 ecore实现元模型是使用Eclipse Indigo SR2中的EMF版本2.7开发的,e-Repository是在相同的环