转:2012年3月最新版的ADT 17.0和Google AdMob Ads添加广告的方法

AdMob是往手机应用程序里添加广告的最流行的方式,Android程序基本都是靠这个赚钱。看文档似乎很简单,但是操作起来却不是那么回事,今天搞了一上午才弄明白怎么正确添加,网上搜索到的资料都不适合最新的SDK。

按照AdMob的官方文档,很简单,只要把AdMob的开发包jar放到Build Path的Libraries里面就行了,这样做编译是没问题的,但是一运行就会出错,提示

java.lang.NoClassDefFoundError:com.google.ads.AdView

这是因为Google最近更新了ADT到17.0,改变了项目依赖的检测方式,官方的说明在这里,不过看得不是很懂。有人用图形的方式标了出来,容易理解一些,看这里。如果不求甚解,就把刚才放到Build Path里面的jar移除,直接在项目目录下建立一个libs目录,然后把那个jar文件放进去就行了。

AdMob SDK也更新到了4.3.1,网上搜索到的在XML文件里面设置AdView属性的方法也已过时,现在不需要建立attrs.xml文件,直接增加一个

xmlns:ads=”http://schemas.android.com/apk/lib/com.google.ads”
就可以在AdView标签里面设置ads开头的属性了,关于xml设置AdView属性的官方文档隐藏得比较深,没有在目录中列出来,只能在其他文档里面的链接里进去,在这里

另外,按照官方说明,要在AndroidManifest.xml里面添加一个Activity的声明:

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

后面那个属性android:configChanges的最后两个值screenSize|smallestScreenSize是在Android 3.2后面才增加的,这两个值必须填上去,否则运行的时候会报错。如果你使用的SDK是3.2以下的,识别不了这两个值,编译也不会报错。因此你的项目必须使用Android 3.2以上的SDK,也就是项目根目录下的project.properties文件里面的属性target的值必须是android-13以上,例如

target=android-15

但是可以在AndroidManifest.xml里面设置android:minSdkVersion和android:targetSdkVersion为比13低的值,这样就不需要安装Android 3.2以上的手机或平板来运行这个程序,实际上AdMob支持Android 1.5以上的系统,只是开发需要更高版本的SDK而已。

这次折腾让我真正体会到Android更新得实在太快了,连官方的文档都来不及更新,开发人员只能自己摸索总结,幸好有强大的搜索工具,只要你遇到的问题不是第一个,就会有人找到解决方案。

From left to right, we have :

  • My project with ADT 16 (the small graphic changes are due to the fact the left image is from Eclipse Windows while the 2 on the right are from Eclipse Mac)
  • My project with ADT 17 before the fix
  • My project with ADT 17 after the fix
This entry was posted in Android, 转载.

发表评论