【问题标题】:Infamous "Error inflating class com.google.android.gms.ads.AdView", works on Mac, not on PC臭名昭著的“错误膨胀类 com.google.android.gms.ads.AdView”,适用于 Mac,不适用于 PC
【发布时间】:2015-01-18 06:13:01
【问题描述】:

我有两台不同的开发计算机,一台 PC 和一台 Mac 笔记本电脑。我经常研究一个,检查 BitBucket 上的私人仓库,然后切换到另一个。

最近我一直在尝试使用 adMob 将广告添加到 Android 应用程序(我的第一个)。当我尝试在模拟器中运行应用程序时,我的 LogCat 中不断打印出“Error inflating class com.google.adroid.gms.ads.AdView”。

我尝试了所有在谷歌上搜索到的常用方法:

  1. 确保我已将 google-play-services-lib 的副本导入我的工作区。
  2. 确保我的项目引用了上述库,并且引用的库旁边有一个绿色勾号。
  3. 确保我已更新 AndroidManifest.xml 所需的权限、元数据和活动。
  4. 确保我的活动 .xml 文件正在导入正确的 xmlns:xmlns:ads="http://schemas.android.com/apk/res-auto"

最后,我将 GoogleAdsSampleActivity 示例导入我的工作区,将 google-play-services_lib 添加为库,并添加了我的 ad_unit_id,但它仍然无法正常工作。

一时兴起,我检查了所有内容,然后切换到我的 Mac。一切正常。回到我的 PC,我可以让它在 Android Studio 中运行,而不是在 eclipse 中,我的 Mac 和 PC 都使用相同版本的 Eclipse(4.4.1 Build Id:20140925-1800)和 ADT(23.0.4.1468518 )。我尝试过重新安装 eclipse,重新安装 ADT,使用旧版本的 Eclipse,甚至将其关闭再打开,但我一直收到同样的错误。

有人见过这个吗?还有什么我可以尝试的其他建议吗?

谢谢

更新 根据要求,这是完整的堆栈跟踪:

01-19 14:28:26.130: E/AndroidRuntime(1067): FATAL EXCEPTION: main
01-19 14:28:26.130: E/AndroidRuntime(1067): Process: com.google.android.gms.samples.ads, PID: 1067
01-19 14:28:26.130: E/AndroidRuntime(1067): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.android.gms.samples.ads/com.google.android.gms.samples.ads.BannerXmlActivity}: android.view.InflateException: Binary XML file line #24: Error inflating class com.google.android.gms.ads.AdView
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.os.Handler.dispatchMessage(Handler.java:102)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.os.Looper.loop(Looper.java:136)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.app.ActivityThread.main(ActivityThread.java:5017)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at java.lang.reflect.Method.invokeNative(Native Method)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at java.lang.reflect.Method.invoke(Method.java:515)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at dalvik.system.NativeStart.main(Native Method)
01-19 14:28:26.130: E/AndroidRuntime(1067): Caused by: android.view.InflateException: Binary XML file line #24: Error inflating class com.google.android.gms.ads.AdView
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.app.Activity.setContentView(Activity.java:1929)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at com.google.android.gms.samples.ads.BannerXmlActivity.onCreate(BannerXmlActivity.java:34)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.app.Activity.performCreate(Activity.java:5231)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
01-19 14:28:26.130: E/AndroidRuntime(1067):     ... 11 more
01-19 14:28:26.130: E/AndroidRuntime(1067): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.AdView" on path: DexPathList[[zip file "/data/app/com.google.android.gms.samples.ads-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.google.android.gms.samples.ads-1, /system/lib]]
01-19 14:28:26.130: E/AndroidRuntime(1067):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.view.LayoutInflater.createView(LayoutInflater.java:559)
01-19 14:28:26.130: E/AndroidRuntime(1067):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
01-19 14:28:26.130: E/AndroidRuntime(1067):     ... 21 more

此外,我意识到我的模拟器运行的是 Android API 级别 17,所以我认为这是问题所在。奇怪的是,即使安装了所有系统映像,它也不允许我创建运行级别 19 的模拟器。经过进一步调查,我发现 Eclipse 指向的是我手动安装的 SDK 版本,大概是几个(或几)年前。我将其更改为使用与 Android Studio 相同的 SDK,现在可以创建 19 级模拟器,但仍然遇到同样的错误。

关于代码,除了添加我自己的 ad_unit_id 之外,我没有对 GoogleAdsSampleActivity 示例进行任何更改。那是我运行得到上述错误的示例。

【问题讨论】:

  • 你能贴一些代码吗?
  • 在这里有用的不是代码,而是错误消息的其余部分。您列出的内容在报告中相对较早;真正有用的是最后一个“Caused by”。请确保您在每种情况下都正确指出了库依赖关系——即,不是通过将其添加到 Java 构建路径,而是通过在项目配置屏幕中列出它。两者看起来非常相似,但一个导致库被包含在 apk 中,另一个导致库被引用以产生看似成功的构建,但未被包含以产生成功的运行。
  • 在将应用部署到设备后,您是在 IDE 中还是在运行时收到此错误消息?

标签: android eclipse admob adt


【解决方案1】:

不要将xmlns:android="http://schemas.android.com/apk/res/android" 放在Linear Layout 标记中,而是将它放在<com.google.android.gms.ads.AdView 标记中。如下图:

 <com.google.android.gms.ads.AdView 
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:adSize="SMART_BANNER"
        />

如需进一步帮助,请访问Link

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多