【问题标题】:Could not find property 'xxxx' on com.android.build.gradle.AppExtension_Decorated在 com.android.build.gradle.AppExtension_Decorated 上找不到属性“xxxx”
【发布时间】:2016-01-18 12:59:56
【问题描述】:

将这些行添加到我的 gradle 文件后出现此错误:

buildTypes.each {
        it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', MyOpenWeatherMapApiKey
    }

然后日志显示:

Could not find property 'MyOpenWeatherMapApiKey' on com.android.build.gradle.AppExtension_Decorated@c3b784

我在谷歌上搜索的解决方案无法解决我的问题。请告诉我我哪里错了?

【问题讨论】:

  • 什么是 MyOpenWeatherMapApiKey ?

标签: android android-studio gradle android-gradle-plugin build.gradle


【解决方案1】:

接受的答案是绝对正确的。另一种可能更简单的方法是将内部值格式化为字符串,如下所示:

it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', '"xxxxxxxxxxxxxxxxxx"'

【讨论】:

    【解决方案2】:
    1. http://openweathermap.org/appid#use 或其他天气 API 提供商处注册帐户以获得您唯一的 API 密钥
    2. 转到您的家庭 gradle 设置:~/.gradle/gradle.properties

    添加这一行:

    MyOpenWeatherMapApiKey="yourUniqueApiKey"
    
    1. 重建它

    【讨论】:

      【解决方案3】:

      我不得不使用此处多个答案中的一些信息来解决此问题。

      1. it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', MyOpenWeatherMapApiKey 很好。投票最多的答案将密钥直接放入此字段,而不是为您的用户引用“全局”密钥。
      2. 您需要通过创建帐户here获取开放天气地图API密钥
      3. Gradle 希望您将通过创建 Open Weather Map 帐户获得的密钥放入名为 MyOpenWeatherMapApiKey 的字段中,该字段由之前的 OPEN_WEATHER_MAP_API_KEY 引用。为此,请在 Android Studio 中打开 gradle.properties 并添加 MyOpenWeatherMapApiKey="<Your Key Here>"

      现在您应该能够毫无问题地构建应用程序了。

      【讨论】:

        【解决方案4】:

        请参阅“需要开放天气地图 API 密钥”。在https://github.com/udacity/Sunshine-Version-2的底部

        【讨论】:

          【解决方案5】:

          您应该在 本地用户 设置中定义 MyOpenWeatherMapApiKey,因此,请转到您的家庭 gradle 设置:~/.gradle/gradle.properties(Win:%USERPROFILE%\.gradle\gradle.properties)。如果gradle.properties 不存在 - 只需创建它。

          在文件中添加以下行:

          MyOpenWeatherMapApiKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXX"

          (不幸的是,Android Udacity 的老师并没有很好地从 gradle 的角度解释它是如何工作的;就像我没有从 gradle 中轻松找到任何文档一样,it.buildConfigField 是如何工作的)

          【讨论】:

          • 你是绝对正确的。这教得很差(带有文本节点 IIRC),将在课程的下一次迭代中进行更改。我们实际上将在这里使用您的方法,因为这显然是正确的做事方式。 FWIW,导致教学效果不佳的一个促成因素是,在最初拍摄课程时,开放天气地图不需要 API 密钥,因此需要快速“创可贴”修复以防止一切损坏。无论如何,请随时在 gmail.com 的 halfjew22 给我发一封电子邮件,我们可以讨论展示这些概念的最佳方式。干杯!
          • @radistao 我已经添加了,但上面写着Error:(21, 0) Could not find property 'MyOpenWeatherMapApiKey' on com.android.build.gradle.AppExtension_Decorated@12b151b.
          • @SiddharthVenu 将MyOpenWeatherMapApiKey = "API_KEY_HERE" 添加到 Sunshine-Version-2 目录中的 gradle.properties 文件时对我有用。
          • @VishnuM。这里也一样,但说明说要在项目目录的.gradle 文件夹中创建花药gradle.properties。他们告诉你必须这样做,因为项目目录中的gradle.properties 将包含在 Git 中,其他人可以看到密钥。
          • 仅供参考 - 我必须在这里阅读以了解如何使其工作。我记得在 Udacity 课程中没有提到。课程中还有许多其他类似的挑战。
          【解决方案6】:

          “OPEN_WEATHER_MAP_API_KEY”引用需要配置的名为“MyOpenWeatherMapApiKey”的 gradle 属性。

          一个原因是构建系统为此生成代码。另一个可能是这样您就不会意外地将您的 API-KEY 提交到 GitHub 或其他公共存储库。

          你应该做的是像这样在你的“gradle.properties”文件中添加一个条目:

          MyOpenWeatherMapApiKey="[YOUR-API-KEY]"

          然后将您的项目与 gradle 同步(如果使用 Android Studio)

          【讨论】:

            【解决方案7】:

            由于您使用的是String,因此您必须使用以下语法:

            buildConfigField "String" , "OPEN_WEATHER_MAP_API_KEY" ,  "\"XXXXX-XXXXX-XXX\""
            

            最后一个参数必须是字符串

            否则你可以使用这样的东西:

            resValue "string", "OPEN_WEATHER_MAP_API_KEY", "\"XXXXX-XXXXX-XXX\""
            

            第一种情况会在您的 BuildConfig 文件中生成一个常量。
            第二种情况生成一个可以使用@string/OPEN_WEATHER_MAP_API_KEY注解访问的字符串资源值。

            【讨论】:

              猜你喜欢
              • 2018-01-09
              • 2020-02-24
              • 1970-01-01
              • 2017-08-21
              • 2013-01-25
              • 2015-02-02
              • 2015-01-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多