构建配置失败错误 ';' 预期

7
我正在导入项目:https://github.com/Kennyc1012/OpenImgur,在收到Imgur客户端ID和API客户端密钥后,构建项目没有问题,但尝试运行应用程序时会出现以下错误:

enter image description here

在BuildConfig.java文件中:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.kennyc.open.imgur";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 21;
  public static final String VERSION_NAME = "2.6.2";
  // Fields from default config.
  public static final String API_CLIENT_ID = fd8drdsgdsgsd4;
  public static final String API_CLIENT_SECRET = 5d4f9adab5zdfhfdxzxdfbdbc72a18087ce;
}

我已经按照build.gradle中的提示放置了API客户端ID和客户端密钥:

buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

repositories {
    maven { url 'https://dl.bintray.com/kennyc1012/maven' }
    maven { url "http://dl.bintray.com/amulyakhare/maven" }
    mavenCentral()
    maven { url 'https://maven.fabric.io/public' }
    jcenter()
    flatDir {
        dirs 'libs'
    }
}

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2" // 22.0.1

    defaultConfig {
        applicationId "com.kennyc.open.imgur"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 21
        versionName "2.6.2"
        buildConfigField "String", "API_CLIENT_ID", "fd8drdsgdsgsd4"
        buildConfigField "String", "API_CLIENT_SECRET", "5d4f9adab5zdfhfdxzxdfbdbc72a18087ce"
    }

    buildTypes {

        release {
            ext.enableCrashlytics = true
            minifyEnabled false
            manifestPlaceholders = [fabric_key: ""]
        }

        debug {
            ext.enableCrashlytics = false
            minifyEnabled false
            manifestPlaceholders = [fabric_key: ""]
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

然而错误仍然存在。既然已经生成了BuildConfig文件,为什么会出现此错误?


为什么要将API密钥添加到生成的“BuildConfig”中? - Jared Burrows
3个回答

13

尝试像这样添加单引号:

buildConfigField "String", "API_CLIENT_ID", '"fd8drdsgdsgsd4"'
buildConfigField "String", "API_CLIENT_SECRET", '"5d4f9adab5zdfhfdxzxdfbdbc72a18087ce"'

在生成BuildConfig类后添加单引号将保留双引号的完整性。


4
在双引号外面添加单引号的想法很棒。谢谢你提供这个简单而巧妙的答案。 - Khaled Saifullah

5
根据您的 BuildConfig.java,这些 Strings 需要添加引号:
public static final String API_CLIENT_ID = "fd8drdsgdsgsd4";
public static final String API_CLIENT_SECRET = "5d4f9adab5zdfhfdxzxdfbdbc72a18087ce";

在Github上的原始项目长这样:

buildConfigField "String", "API_CLIENT_ID", project.API_CLIENT_ID
buildConfigField "String", "API_CLIENT_SECRET", project.API_CLIENT_SECRET

project. 这个词意味着 API_CLIENT_IDAPI_CLIENT_SECRET 已经在 gradle.properties 文件中定义好了,但该文件并不在代码库中。

您可以创建一个 gradle.properties 文件,并将其放在与 build.gradle 相同的目录下,例如:

API_CLIENT_ID = fd8drdsgdsgsd4
API_CLIENT_SECRET = 5d4f9adab5zdfhfdxzxdfbdbc72a18087ce
FABRIC_KEY = some key

该项目只是为了方便您使用自己的 gradle.properties 文件替换变量。


我尝试在BuildConfig.java文件中硬编码,但它总是在运行时被覆盖。 - Sauron
我该如何正确地将 gradle.properties 文件添加到应用程序中? - Sauron
那该怎么实现呢? - Sauron
@Sauron 这只是一个空文件。你在问什么?只需创建一个空文本文件,然后将我的答案复制粘贴进去即可。 - Jared Burrows
让我们在聊天中继续这个讨论 - Sauron
显示剩余3条评论

0
如果有人遇到和我一样的问题,添加单引号无效的情况下,我使用反斜杠\作为字符串值中的转义字符。
buildConfigField("String", "BASE_URL", "\"{YOUR_BASE_URL}\"")
buildConfigField("String", "API_KEY", "\"{YOUR_API_KEY}\"")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接