在com.android.build.gradle.AppExtension_Decorated上找不到属性'xxxx'

Din*_*ien 16 android gradle android-studio build.gradle android-gradle-plugin

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

buildTypes.each {
        it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', MyOpenWeatherMapApiKey
    }
Run Code Online (Sandbox Code Playgroud)

然后日志显示:

Could not find property 'MyOpenWeatherMapApiKey' on com.android.build.gradle.AppExtension_Decorated@c3b784
Run Code Online (Sandbox Code Playgroud)

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

Gab*_*tti 26

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

buildConfigField "String" , "OPEN_WEATHER_MAP_API_KEY" ,  "\"XXXXX-XXXXX-XXX\""
Run Code Online (Sandbox Code Playgroud)

最后一个参数必须是String

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

resValue "string", "OPEN_WEATHER_MAP_API_KEY", "\"XXXXX-XXXXX-XXX\""
Run Code Online (Sandbox Code Playgroud)

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


rad*_*tao 12

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

在文件中添加以下行:

MyOpenWeatherMapApiKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXX"

(不幸的是,Android的Udacity老师们不是很好解释它是如何从gradle这个角度看工作;作为同我不容易被发现从如何的gradle任何文件it.buildConfigField作品)

  • 你是绝对正确的.教学效果非常差(使用文本节点IIRC),并将在课程的下一次迭代中进行更改.我们实际上会在这里使用你的方法,因为它显然是正确的做事方式.FWIW,导致教学效果不佳的因素之一是因为当课程最初拍摄时,开放天气地图不需要API密钥,因此需要快速"绑定"修复以防止一切破坏.无论如何,请随时给我发一封电子邮件在halfjew22 at gmail.com,我们可以聊聊最好的方式来展示这些概念.干杯! (2认同)
  • @VishnuM.同样在这里,但说明说在项目目录的`.gradle`文件夹中创建了anther`gradle.properties`.他们告诉你必须这样做,因为项目目录中的`gradle.properties`将包含在Git中,其他人可以看到密钥. (2认同)

Lee*_*ell 11

'OPEN_WEATHER_MAP_API_KEY'引用了一个名为'MyOpenWeatherMapApiKey'的gradle属性,需要进行配置.

一个原因是构建系统为此生成代码.另一个可能是你不小心将API-KEY提交给GitHub或其他公共仓库.

你应该做的是在'gradle.properties'文件中添加一个条目,如下所示:

MyOpenWeatherMapApiKey = "[YOUR-API-KEY]"

然后使用gradle同步项目(如果使用Android Studio)


Sen*_*nti 5

请参阅"需要打开天气图API密钥".在https://github.com/udacity/Sunshine-Version-2的底部