ClassNotFoundException: Didn't find class "com.google.android.gms.ads.AdView"

12,535

Solution 1

This because ProGuard. To safely use ProGuard with Google Mobile Ads, add the following to your ProGuard config:

-keep public class com.google.android.gms.ads.** {
   public *;
}

-keep public class com.google.ads.** {
   public *;
}

Solution 2

I finally solved my problems by

  • installing the newest version of Android SDK Build Tools (didn't realize that I did not have them yet)
  • switching from Compiler compliance level 1.6 to 1.7 (Window - Preferences - Java - Compiler - Compiler compliance level)

Thanks at everybody.

Solution 3

I did what @user1684030 said (upgraded Android SDK Build Tools; changed compiler to 1.7), but not worked for me. I've written the solution that I found in case it could help anyone with the same problem:

In the step 3 of Setting Up Google Play Services says:

In your app project, reference Google Play services library project. See Referencing a Library Project for Eclipse for more information on how to do this.

Note: You should be referencing a copy of the library that you copied to your development workspace—you should not reference the library directly from the Android SDK directory.

Solution: Don't do the copy manually. Instead just check the box in Eclipse that says "Copy projects into workspace"

I did it so and everything worked again.

Thanks to this StackOverFlow question: How to fix Google Play Services 2 Library install to Eclipse (Admob is part of Google Play Services)

Share:
12,535
flxapps
Author by

flxapps

Updated on October 10, 2022

Comments

  • flxapps
    flxapps over 1 year

    I did a lot of research and this seems to be a common error for many users but for very different reasons. None of which I found worked for me.

    I'm getting

    java.lang.RuntimeException: Unable to start activity ComponentInfo{
    [...]/[...].activities.StartActivity}: android.view.InflateException:
    Binary XML file line #173: Error inflating class [...].BannerAd
        [...]
    Caused by: android.view.InflateException: Binary XML file line #8: Error
    inflating class com.google.android.gms.ads.AdView
        [...]
    Caused by: java.lang.ClassNotFoundException: Didn't find class
    "com.google.android.gms.ads.AdView" on path: DexPathList[[zip file
    "/data/app/[...]-1.apk"],nativeLibraryDirectories=[/data/app-lib/[...]-1,
    /vendor/lib, /system/lib]]
    

    I'm having the newest versions of ADT and SDK packages installed. I copied google-play-services_lib to my workspace and imported it as a Android project. I added it as a library to my app project. I checked everything under "Order and Export".

    I'm having a banner_ad.xml:

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|top"
        android:orientation="vertical" >
    
        <com.google.android.gms.ads.AdView
            xmlns:ads="http://schemas.android.com/apk/res-auto"
            android:id="@+id/adView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            ads:adSize="BANNER"
            ads:adUnitId="[...]" />
    
    </LinearLayout>
    

    And a BannerAd.java which I am using:

    package [...];
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.LayoutInflater;
    import android.widget.LinearLayout;
    
    import [...].R;
    import [...].general.Settings;
    import com.google.android.gms.ads.AdRequest;
    import com.google.android.gms.ads.AdView;
    
    
    public class BannerAd extends LinearLayout {
        public BannerAd(Context context, AttributeSet attrs) {
            super(context, attrs);
    
            if (!Settings.PRO) {
                LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                mInflater.inflate(R.layout.banner_ad, this, true);
    
                AdView adView = (AdView) this.findViewById(R.id.adView);
                AdRequest adRequest = new AdRequest.Builder().build();
                adView.loadAd(adRequest);
            }
        }
    }
    

    Could it have something to do with proguard? I have no idea, this is my proguard-project.txt file, however:

    # To enable ProGuard in your project, edit project.properties
    # to define the proguard.config property as described in that file.
    #
    # Add project specific ProGuard rules here.
    # By default, the flags in this file are appended to flags specified
    # in ${sdk.dir}/tools/proguard/proguard-android.txt
    # You can edit the include path and order by changing the ProGuard
    # include property in project.properties.
    #
    # For more details, see
    #   http://developer.android.com/guide/developing/tools/proguard.html
    
    # Add any project specific keep options here:
    
    # If your project uses WebView with JS, uncomment the following
    # and specify the fully qualified class name to the JavaScript interface
    # class:
    #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
    #   public *;
    #}
    
    -keep class * extends java.util.ListResourceBundle {
        protected Object[][] getContents();
    }
    
    -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
        public static final *** NULL;
    }
    
    -keepnames @com.google.android.gms.common.annotation.KeepName class *
    -keepclassmembernames class * {
        @com.google.android.gms.common.annotation.KeepName *;
    }
    
    -keepnames class * implements android.os.Parcelable {
        public static final ** CREATOR;
    }
    

    Any ideas what I could try to fix this?

    Edit: Sometimes, I also get such output in the console (but not every time I compile, only sometimes):

    [2014-07-24 12:49:05 - [...]] Dx 
    trouble processing:
    [2014-07-24 12:49:05 - [...]] Dx bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing com/google/android/gms/internal/mb.class
    ...while processing com/google/android/gms/internal/mb.class
    [2014-07-24 12:49:05 - [...]] Dx 
    trouble processing:
    [2014-07-24 12:49:05 - [...]] Dx bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing com/google/android/gms/internal/mc.class
    ...while processing com/google/android/gms/internal/mc.class
    [2014-07-24 12:49:05 - [...]] Dx 
    [...]
    [Lots of similar warnings here]
    [...]
    trouble processing:
    [2014-07-24 12:49:25 - [...]] Dx bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing com/google/ads/mediation/customevent/CustomEventAdapter$a.class
    ...while processing com/google/ads/mediation/customevent/CustomEventAdapter$a.class
    [2014-07-24 12:49:25 - [...]] Dx 
    trouble processing:
    [2014-07-24 12:49:25 - [...]] Dx bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing com/google/ads/mediation/customevent/CustomEventServerParameters.class
    ...while processing com/google/ads/mediation/customevent/CustomEventServerParameters.class
    [2014-07-24 12:49:25 - [...]] Dx 2786 warnings
    
  • user2163298
    user2163298 over 9 years
    your issues is the closest post i have seen to experiencing exactly what I am right now - i already upgraded to the latest stuff, and my compiler compliance level was already set to 1.7... any other ideas?
  • Ignacio Rubio
    Ignacio Rubio over 9 years
    I had the same exception than @user1684030, but this answer not solved my problem (the same as @user2163298). I've written the solution that I found in case it could help anyone who has the same problem.
  • Marius Bughiu
    Marius Bughiu over 4 years
    Thanks for this. I totally forgot I had enabled it and was chasing the multidex believing that was the issue. Added a ProGuard config with the above contents and now everything works fine. Thanks a lot!