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

如何使用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

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

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

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

  • 我在父类和子类中都有构建器。父对象有一个抽象生成器和一个扩展抽象生成器的具体生成器。子级有一个扩展父级抽象生成器的抽象生成器和一个扩展子级抽象生成器的具体生成器。原因是父级的setter返回当前的Builder类。我有一些方法返回类自己的抽象构建器类型,我想将其称为父抽象类型(调用它的父方法)。我所能做的就是