Augustine Joseph
Augustine Joseph

Reputation: 2287

Android - AdMob Exception - Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class com.google.android.gms.ads.AdView

I am getting the below exception when running an android application with AdMob I tried different ideas given by other people for the same type of error but still its not working. So I creating a new question.

Also this project was created using cordova and project structure is as this image.

I am using below Environments

JDK 8

Google Play Service - 19

Below jars are inside the lib directory

android-support-v4.jar google-play-services.jar

Java Code with Main Activity

 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>

Exception

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();
    }

Upvotes: 1

Views: 3065

Answers (2)

techcorns
techcorns

Reputation: 11

Instead of putting xmlns:android="http://schemas.android.com/apk/res/android" in the Linear Layout tag, put it in <com.google.android.gms.ads.AdView tag. as shown below:

 <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" />

For further assistance visit this Link

Upvotes: 1

Nana Ghartey
Nana Ghartey

Reputation: 7927

Don't put google-play-services.jar in the /libs/ folder. Instead, reference the google play services library in your project.

Import the library into your workspace. You'll find it in sdk/extras/google/.. if you downloaded via the sdk manager. Then reference by right clicking your project => selecting properties => Android => Add

Also, in your layout, change the xml namespace:

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

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

Update:

The activity and meta-data declaration should be within the <application> tag and not outside. So modify your manifest as follows:

<?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>

Upvotes: 1

Related Questions