Android - AdMob异常 - 引起:android.view.InflateException:二进制XML文件行#8:错误导致类com.google.android.gms.ads.AdView

时间:2014-09-29 04:12:55

标签: android eclipse admob

使用AdMob运行Android应用程序时出现以下异常 我尝试了其他人给出的相同类型错误的不同想法,但仍然无法正常工作。所以我创建了一个新问题。

此项目也是使用cordova创建的,项目结构如此图片。

我在环境下使用

JDK 8

Google Play服务 - 19

jars下面是lib目录

机器人支撑-v4.jar 谷歌播放-services.jar

主要活动的Java代码

 package com.aotsinc.games.android.c2c.bible;

import org.apache.cordova.CordovaActivity;

import android.os.Bundle;
import android.view.Window;
import android.widget.LinearLayout;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;


public class Clues2BibleCharacter extends CordovaActivity {
    private static final String AdMob_Ad_Unit = "a150e3af6a308da";
    private AdView adView;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        adView = new AdView(this);
        adView.setAdUnitId(AdMob_Ad_Unit);
        adView.setAdSize(AdSize.BANNER);

        LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);
        layout.addView(adView);

        AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .addTestDevice("INSERT_YOUR_HASHED_DEVICE_ID_HERE")
            .build();

        adView.loadAd(adRequest);

        this.setIntegerProperty("loadUrlTimeoutValue", 70000);
        super.setIntegerProperty("splashscreen", R.drawable.screen);
        loadUrl(launchUrl);
    }   
}

的AndroidManifest.xml

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.aotsinc.games.android.c2c.bible" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="Clues2BibleCharacter" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:name="com.google.ads.AdActivity" />
    </application>
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <activity android:name="com.google.android.gms.ads.AdActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
    <meta-data android:name="com.google.android.gms.version"
        android:value="4452000" />
</manifest>

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:id="@+id/linearLayout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <com.google.android.gms.ads.AdView android:id="@+id/adView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         ads:adUnitId="a150e3af6a308da"
         ads:adSize="BANNER"
         ads:loadAdOnCreate="true" />
</LinearLayout>

异常

09-29 03:51:12.924: I/CordovaLog(2434): Changing log level to DEBUG(3)
09-29 03:51:12.940: W/dalvikvm(2434): VFY: unable to resolve static field 898 (AdsAttrs) in Lcom/google/android/gms/R$styleable;
09-29 03:51:12.940: D/dalvikvm(2434): VFY: replacing opcode 0x62 at 0x0009
09-29 03:51:12.944: D/AndroidRuntime(2434): Shutting down VM
09-29 03:51:12.952: W/dalvikvm(2434): threadid=1: thread exiting with uncaught exception (group=0xa4c36648)
09-29 03:51:12.952: E/AndroidRuntime(2434): FATAL EXCEPTION: main
09-29 03:51:12.952: E/AndroidRuntime(2434): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.aotsinc.games.android.c2c.bible/com.aotsinc.games.android.c2c.bible.Clues2BibleCharacter}: android.view.InflateException: Binary XML file line #8: Error inflating class com.google.android.gms.ads.AdView
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.os.Looper.loop(Looper.java:137)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.app.ActivityThread.main(ActivityThread.java:5103)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at java.lang.reflect.Method.invokeNative(Native Method)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at java.lang.reflect.Method.invoke(Method.java:525)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at dalvik.system.NativeStart.main(Native Method)
09-29 03:51:12.952: E/AndroidRuntime(2434): Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class com.google.android.gms.ads.AdView
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.view.LayoutInflater.createView(LayoutInflater.java:620)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.app.Activity.setContentView(Activity.java:1895)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at com.aotsinc.games.android.c2c.bible.Clues2BibleCharacter.onCreate(Clues2BibleCharacter.java:21)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.app.Activity.performCreate(Activity.java:5133)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
09-29 03:51:12.952: E/AndroidRuntime(2434):     ... 11 more
09-29 03:51:12.952: E/AndroidRuntime(2434): Caused by: java.lang.reflect.InvocationTargetException
09-29 03:51:12.952: E/AndroidRuntime(2434):     at java.lang.reflect.Constructor.constructNative(Native Method)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at android.view.LayoutInflater.createView(LayoutInflater.java:594)
09-29 03:51:12.952: E/AndroidRuntime(2434):     ... 22 more
09-29 03:51:12.952: E/AndroidRuntime(2434): Caused by: java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
09-29 03:51:12.952: E/AndroidRuntime(2434):     at com.google.android.gms.internal.an.<init>(Unknown Source)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at com.google.android.gms.internal.at.<init>(Unknown Source)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at com.google.android.gms.internal.at.<init>(Unknown Source)
09-29 03:51:12.952: E/AndroidRuntime(2434):     at com.google.android.gms.ads.AdView.<init>(Unknown Source)
09-29 03:51:12.952: E/AndroidRuntime(2434):     ... 25 more

CordovaActivity.java

 @Override
    public void onCreate(Bundle savedInstanceState) {
        LOG.i(TAG, "Apache Cordova native platform version " + CordovaWebView.CORDOVA_VERSION + " is starting");
        LOG.d(TAG, "CordovaActivity.onCreate()");
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);

        if(savedInstanceState != null)
        {
            initCallbackClass = savedInstanceState.getString("callbackClass");
        }

        loadConfig();
    }

2 个答案:

答案 0 :(得分:1)

不要将google-play-services.jar放在/libs/文件夹中。相反,请参考项目中的Google Play服务库。

将库导入工作区。如果您通过sdk管理器下载,则可以在sdk/extras/google/..中找到它。 然后通过右键单击您的项目参考=&gt;选择属性=&gt; Android =&gt;添加

此外,在您的布局中,更改xml命名空间:

xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

至:xmlns:ads="http://schemas.android.com/apk/res-auto"

更新:

活动和元数据声明应在<application>标记内,而不在外部。因此,修改您的清单如下:

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.aotsinc.games.android.c2c.bible" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="Clues2BibleCharacter" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:name="com.google.ads.AdActivity" />
        <activity android:name="com.google.android.gms.ads.AdActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
        <meta-data android:name="com.google.android.gms.version"
        android:value="4452000" />
    </application>
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>

答案 1 :(得分:1)

不要将xmlns:android="http://schemas.android.com/apk/res/android"放在线性布局标记中,而是将其放在<com.google.android.gms.ads.AdView标记中。如下图所示:

 <com.google.android.gms.ads.AdView 
         xmlns:ads="http://schemas.android.com/apk/res-auto"
         android:id="@+id/adView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         ads:adUnitId="a150e3af6a308da"
         ads:adSize="BANNER"
         ads:loadAdOnCreate="true" />

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