Eclipse中Android的Admob错误:configChanges

132

在我的AndroidManifest.xml文件中,Eclipse在android:configChanges这一行给了我一个错误:

<activity android:name="com.google.ads.AdActivity"
              android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"></activity>

错误信息如下:

error: Error: String types not allowed (at 'configChanges' with value 'keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize').
如果我只保留键盘|键盘隐藏|方向,就不会出现错误,但是当我尝试构建时,编译器会要求剩余的4个参数。
我正在使用GoogleAdMobAdsSDK-4.3.1
有任何想法吗?
编辑:通过修改我的default.properties(在低于14的SDK上为project.properties)文件,我成功使其工作。
# Project target.
target=android-14

我的SDK管理器中安装了SDK平台 Android 4.0 - Revision 14

如果使用的是 SDK平台Android 3.2 - Revision 13,那么只需要将项目属性文件 project.properties 的目标更改为 android-13 即可。基本上你只需要确保SDK版本号在13或以上,并且在SDK管理器中安装了该SDK,项目属性文件 (default/project.properties) 指向它即可。


你使用的安卓版本是哪个? - HefferWolf
最低SDK版本为7 - Android 2.1 - Mark Cameron
我尝试将目标更改为13,但它没有起作用...可能的原因是什么? - Anirudh
@anirudhmaddy 你用了 "android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 还是缩写版?如果你将目标版本升至13或以上,使用更长的 configChanges 参数,应该就没问题了。 - Gürcan Kavakçı
@gurcan15 呦,现在好了。 - Anirudh
7个回答

86

简单的解决方案:(不需要更改min-sdk值!!)

步骤1: 更改 "project.properties" 文件

# Project target.
target=android-13

步骤 2: 在 Eclipse 中

Project > Clean... > (select your project) > Clean projects selected below > OK

如果您需要一个带真实示例的完整解释,请使用这个教程 http://www.monkeycoder.co.nz/Community/posts.php?topic=1121

干杯!


1
太好了!我也在使用SDK7,尽管是Google API版本。因此,在我的属性文件中,我使用了# Project target.target=Google Inc.:Google APIs:13。 - worked

74
简单地说:在Android 2.1版本中不支持所提到的配置更改,请参阅此处:http://developer.android.com/guide/topics/manifest/activity-element.html#config,例如,uiMode需要API Level 8。
根据官方的AdMob文档要求,Google AdMob Ads SDK适用于Android 1.5或更高版本,确保你拥有最新的Android SDK,并且至少编译于Android v3.2(将default.properties中的目标设置为android-13)。请参见此处:https://developers.google.com/admob/android/quick-start
因此,我认为您的工具版本尚未更新至至少Version 13。

9
屏幕尺寸(screenSize)和最小屏幕尺寸(smallestScreenSize)只能在API Level 13及以上版本中使用,也就是Honeycomb版本及以上。您确定需要它们吗?因为它们与Honeycomb版本相关性较高。 - HefferWolf
1
如果我不声明它们,LogCat 会显示以下内容:com.google.ads.AdActivity 的 android:configChanges 值必须包括 screenLayout。 com.google.ads.AdActivity 的 android:configChanges 值必须包括 uiMode。 com.google.ads.AdActivity 的 android:configChanges 值必须包括 screenSize。 com.google.ads.AdActivity 的 android:configChanges 值必须包括 smallestScreenSize。 您必须在 AndroidManifest.xml 中声明 AdActivity,并配置 configChanges。 广告应该出现的位置会变成一个黑色框,里面写着最后的错误信息,字体为红色。 - Mark Cameron
1
我在上面的回复中添加了来自SDK的相当重要的注释。 - HefferWolf
请问您能回答这个问题吗?http://stackoverflow.com/questions/25915836/admob-only-displaying-test-banner - Vivek Warde
链接已损坏。 - JohnA10
显示剩余11条评论

18
对于使用Eclipse的人,有一种更简单的方法: 在左侧的“Package Explorer”窗格中右键单击项目文件夹,然后点击属性->Android->在“项目构建目标”列表中选择API 13或更高版本。 注意:这与编辑auto-generated的project.properties文件的效果相同。 这将使用包括以前未被识别的项的Android 3.2 SDK构建您的项目。
在您的Manifest.xml中,您可以将您的android:minSdkVersiontargetSdkVersion值保持不变。 但要注意,如果您不将targetSdkVersion设置为API 12或更低(或根本不设置),Android系统将假定android:configChangesscreenSizesmallestScreenSize(在API 13 中引入)已经考虑到,并因此允许销毁重新启动您的活动。如果您想避免这样做,必须在其他<activity>标记中包括这些术语(直到现在可能仅具有keyboard|keyboardHidden|orientation)。

但是,如果您的应用程序针对API级别12或更低版本,则您的活动始终会自行处理此配置更改(即使在运行在Android 3.2或更高版本的设备上时,此配置更改也不会重新启动您的活动)。

引用来自这里

3

我也遇到了同样的问题,所以来到这里。
我从https://developers.google.com/admob/android/quick-start下载了示例代码,在尝试了以上所有答案后仍然无法解决该问题,因此我使用了示例项目中提供的相同admob sdk。重新构建jar包,将目标更改为android-15,并使用他们使用的相同行:

<activity android:name="com.google.ads.AdActivity" 
              android:configChanges="keyboard|keyboardHidden|orientation"/>

而且它有效!


我认为这是正确的方法。因为对于我来说,自从Asynctasks从API某个版本开始就出现了问题(它们现在使用顺序执行器而不是并行执行器,因为他们与并行执行器有“问题”),我宁愿使用旧的目标,也不想手动修改默认执行器... - Radu

0

简单解决方案: 将"project.properties"文件更改为21

# Project target.
target=android-21

0

你使用了 android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|‌​screenSize|smallestScreenSize

还是用了更短的一个?如果你将目标版本升级到13以上并使用我写的更长的configChanges,它应该可以正常工作。


-4
所有在2011年10月14日之后创建的新Android应用程序都需要使用在2011年3月15日或之后发布的AdMob SDK。这对应于Android的4.0.2+版本。如果您从我们的官方下载站点下载了库,则已经设置好了。否则,您可能拥有早于2011年3月15日发布的旧版AdMob SDK,直到更新SDK之前,您的新应用程序将无法接收任何广告展示。

你只是从互联网上复制粘贴了一些东西,却没有理解它。这与实际问题毫无关系。 - Torben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接