找不到属性';xxxx和x27;在com.android.build.gradle.AppExtension\u上

找不到属性';xxxx和x27;在com.android.build.gradle.AppExtension\u上,android,android-studio,gradle,android-gradle-plugin,build.gradle,Android,Android Studio,Gradle,Android Gradle Plugin,Build.gradle,在将以下行添加到gradle文件后,我出现了此错误: buildTypes.each { it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', MyOpenWeatherMapApiKey } 然后日志显示: Could not find property 'MyOpenWeatherMapApiKey' on com.android.build.gradle.AppExtension_Decorated@c

在将以下行添加到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

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

因为您使用的是
字符串
,所以必须使用以下语法:

buildConfigField "String" , "OPEN_WEATHER_MAP_API_KEY" ,  "\"XXXXX-XXXXX-XXX\""
最后一个参数必须是字符串

否则,您可以使用如下内容:

resValue "string", "OPEN_WEATHER_MAP_API_KEY", "\"XXXXX-XXXXX-XXX\""
it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', '"xxxxxxxxxxxxxxxxxx"'
第一种情况是在
BuildConfig
文件中生成一个常量。

第二种情况生成一个字符串资源值,可以使用
@string/OPEN\u WEATHER\u MAP\u API\u KEY
注释访问该值。

OPEN\u WEATHER\u MAP\u API\u KEY'引用一个名为“myopenweathermappikey”的渐变属性,该属性需要配置

一个原因是构建系统要为此生成代码。另一种可能是,这样您就不会意外地将API密钥提交给GitHub或其他公共repo

您应该做的是向“gradle.properties”文件添加一个条目,如下所示:

resValue "string", "OPEN_WEATHER_MAP_API_KEY", "\"XXXXX-XXXXX-XXX\""
it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', '"xxxxxxxxxxxxxxxxxx"'
MyOpenWeatherMapApiKey=“[YOUR-API-KEY]”


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

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

在文件中添加以下行:

myopenweathermappikey=“XXXXXXXXXXXXXXXXXXXXXXXXXXXX”


(不幸的是,Android Udacity的老师们并没有很好地从gradle的角度解释它是如何工作的;正如我没有很容易从gradle找到任何关于it.buildConfigField如何工作的文档一样)

请参见“需要开放天气图API密钥”在

的底部,我不得不使用这里的多个答案中的一些信息来解决这个问题

  • it.buildConfigField'String'、'OPEN\u WEATHER\u MAP\u API\u KEY',myopenweathermappikey
    可以。排名靠前的答案将密钥直接放入此字段,而不是为您的用户引用“全局”密钥
  • 您需要通过创建帐户来获取开放天气图API密钥
  • Gradle希望您将通过创建开放式天气图帐户获得的密钥放入名为
    MyOpenWeatherMapApiKey
    的字段中,该字段由之前的
    Open\u Weather\u Map\u API\u key
    引用。为此,请在Android Studio中打开gradle.properties并添加
    MyOpenWeatherMapApiKey=“”
  • 现在,您应该能够构建没有问题的应用程序

  • 在或其他气象api提供商处注册帐户以获取您的唯一api密钥
  • 转到您的主页渐变设置:~/.gradle/gradle.properties
  • 添加此行:

    MyOpenWeatherMapApiKey="yourUniqueApiKey"
    
  • 重建它

  • 公认的答案是绝对正确的。另一种可能更简单的方法是将字符串中的值格式化为如下所示:

    resValue "string", "OPEN_WEATHER_MAP_API_KEY", "\"XXXXX-XXXXX-XXX\""
    
    it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', '"xxxxxxxxxxxxxxxxxx"'
    

    什么是MyOpenWeatherMapApiKey?你完全正确。这一点教得很差(使用文本节点IIRC),将在课程的下一次迭代中更改。实际上,我们将在这里使用您的方法,因为它显然是正确的做事方式。FWIW,这门课教得不好的原因之一是,在课程最初拍摄时,开放式天气图不需要API密钥,因此需要快速“绷带”修复,以防止一切破坏。无论如何,请随时给我发电子邮件到gmail.com的halfjew22,我们可以聊聊展示这些概念的最佳方式。干杯@我已经添加了这一点,但它显示
    错误:(21,0)在com.android.build.gradle.AppExtension上找不到属性“MyOpenWeatherMapApiKey”_Decorated@12b151b.
    @SiddharthVenu在这里添加MyOpenWeatherMapApiKey=“API\u KEY\u”时,它对我起了作用转到Sunshine-Version-2目录中的gradle.properties文件。@VishnuM。这里也一样,但说明中说要在项目目录的
    .gradle
    文件夹中创建另一个
    gradle.properties
    。他们告诉您必须这样做,因为项目目录中的
    gradle.properties
    将包含在Git中,其他人可以看到key.FYI-我必须在这里阅读,以了解如何使其工作。我记得在Udacity课程中没有提到。课程中还有很多类似的挑战。