【问题标题】:BuildConfig Failure error ';' expectedBuildConfig 失败错误';'预期的
【发布时间】:2015-04-27 00:55:48
【问题描述】:

我正在导入项目:https://github.com/Kennyc1012/OpenImgur 并在收到 Imgurs 客户端 ID 和 API 客户端密钥后,构建项目很好,但随后尝试运行应用程序会发现错误:

在 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 文件,为什么会出现这个错误呢?

【问题讨论】:

  • 为什么要在生成的BuildConfig 中添加 API 密钥?

标签: android android-gradle-plugin buildconfig


【解决方案1】:

尝试像这样添加单引号:

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

添加单引号将在 BuildConfig 类生成后保持双引号不变

【讨论】:

  • 在双引号周围添加单引号的想法很棒。谢谢你这个简单而棘手的答案
【解决方案2】:

根据您的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_SECRETgradle.properties 文件中定义。 (这不在 repo 中)。

我会创建一个gradle.properties 并放在与build.gradle 相同的目录中,如下所示:

API_CLIENT_ID = fd8drdsgdsgsd4
API_CLIENT_SECRET = 5d4f9adab5zdfhfdxzxdfbdbc72a18087ce
FABRIC_KEY = some key

编写该项目只是为了轻松地将变量替换为您自己的gradle.properties

【讨论】:

  • 我尝试在 BuildConfig.java 文件中硬编码,但它总是在运行时重写
  • 如何正确地将gradle.propertles 文件添加到应用程序中?
  • @Sauron 请看我的回答,我说的是I would create a gradle.properties and put in the same directory as the build.gradle
  • 如何实现?
  • @Sauron 这只是一个空文件。你在问什么?只需创建一个空文本文件,然后将我的答案复制并粘贴到其中即可。
猜你喜欢
  • 1970-01-01
  • 2017-10-17
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2012-08-29
相关资源
最近更新 更多