在我的Android Studio项目中,有两个带有一些buildConfigField的构建配置:

    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_VERSION和SERVER_URL没有正确生成为字符串类型,它们没有引号。

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


当前回答

我也很困惑。但这里有一个意义- "String"定义了字段的类型,而字段值不会被自动引用,以允许我们在这里使用表达式:

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

否则,这是不可能的。

其他回答

我也很困惑。但这里有一个意义- "String"定义了字段的类型,而字段值不会被自动引用,以允许我们在这里使用表达式:

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

否则,这是不可能的。

只有“我的东西”对我有用。我的东西里有各种奇怪的人物。

在gradle.properties中编写代码

YOUR_ACCESS_PARAMS = "YOUR_VALUE"

将代码写入应用程序级别build.gradle

android{
    ...
     buildTypes.each{
        it.buildConfigField 'String', 'ACCESS_PARAMS', YOUR_ACCESS_PARAMS
    }
}

生成的BuildConfig.java如下:

public final class BuildConfig {  
    public static final boolean DEBUG = Boolean.parseBoolean("true");   
    public static final String APPLICATION_ID = "xxx.xxxxxxxx.xxx";   
    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.0";  
    // Fields from build type: debug  
    public static final String ACCESS_PARAMS = "YOUR_VALUE";  
}

转义你的字符串引号:

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

字符串类型的构建配置字段应该这样声明:

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

字段名加引号,字段值加转义引号。