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

在将这些行添加到我的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 

我search的谷歌解决scheme不能解决我的问题。 请告诉我我哪里错了?

Solutions Collecting From Web of "在com.android.build.gradle.AppExtension_Decorated找不到属性'xxxx'"

既然你正在使用一个String你必须使用这个语法:

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

最后一个参数必须是一个string

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

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

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

'OPEN_WEATHER_MAP_API_KEY'引用了需要configuration的名为“MyOpenWeatherMapApiKey”的gradle属性。

一个原因是构build系统为此生成代码。 另一个可能是你不小心提交你的API-KEY到GitHub或其他公共回购。

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

MyOpenWeatherMapApiKey = “[YOUR-API-KEY]”

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

你应该在你的本地用户设置中定义MyOpenWeatherMapApiKey ,所以,进入你的家乡gradle设置: ~/.gradle/gradle.properties (Win: %USERPROFILE%\.gradle\gradle.properties )。 如果gradle.properties不存在 – 只需创build它。

在文件中添加以下行:

MyOpenWeatherMapApiKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXX"

(不幸的是,Android Udacity老师不太好解释,从gradle的angular度来看它是如何工作的;同样,我不容易从gradle中find任何文档,it.buildConfigField是如何工作的)

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

  1. http://openweathermap.org/appid#use或其他天气api提供商注册帐户以获取您的唯一API密钥
  2. 转到您的家庭gradle设置:〜/ .gradle / gradle.properties

添加这一行:

 MyOpenWeatherMapApiKey="yourUniqueApiKey" 
  1. 重build它

我不得不在这里用多个答案来解决这个问题。

  1. it.buildConfigField 'String', 'OPEN_WEATHER_MAP_API_KEY', MyOpenWeatherMapApiKey是好的。 最高票数的答案把钥匙直接放在这个领域,而不是引用你的用户的“全球”键。
  2. 您需要通过在此处创build帐户来获取开放式天气地图API密钥
  3. Gradle期望您将创buildOpen Weather Map帐户的密钥放入名为MyOpenWeatherMapApiKey的字段中,该字段由OPEN_WEATHER_MAP_API_KEY从之前引用。 为此,请在Android Studio中打开gradle.properties,并添加MyOpenWeatherMapApiKey="<Your Key Here>"

现在你应该可以build立没有问题的应用程序。

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

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