ClassNotFoundException: no encontró la clase “com.google.android.gms.ads.AdView”

Investigué mucho y parece ser un error común para muchos usuarios, pero por razones muy diferentes. Nada de lo que encontré funcionó para mí.

Me estoy poniendo

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

Tengo instaladas las versiones más recientes de los paquetes ADT y SDK. Copié google-play-services_lib a mi espacio de trabajo y lo importé como un proyecto de Android. Lo agregué como una biblioteca a mi proyecto de aplicación. Revisé todo en “Ordenar y Exportar”.

Tengo un banner_ad.xml:

    

Y un BannerAd.java que estoy usando:

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

¿Podría tener algo que ver con proguard? No tengo ni idea, este es mi archivo proguard-project.txt, sin embargo:

 # 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; } 

¿Alguna idea de lo que podría tratar de arreglar esto?

Editar: A veces, también obtengo ese resultado en la consola (pero no cada vez que compilo, solo algunas veces):

 [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 

Finalmente resolví mis problemas

  • instalar la versión más reciente de las herramientas de comstackción de Android SDK (no me di cuenta de que aún no las tenía)
  • cambiar del nivel de cumplimiento del comstackdor 1.6 a 1.7 (Ventana – Preferencias – Java – Comstackdor – Nivel de cumplimiento del comstackdor)

Gracias a todos.

Hice lo que dijo @ user1684030 (las herramientas de comstackción SDK de Android mejoradas, el comstackdor cambiado a 1.7), pero no funcionó para mí. Escribí la solución que encontré en caso de que pudiera ayudar a alguien con el mismo problema:

En el paso 3 de Configuración de Google Play Services, dice:

En su proyecto de aplicación, consulte el proyecto de la biblioteca de servicios de Google Play. Consulte Hacer referencia a un proyecto de biblioteca para Eclipse para obtener más información sobre cómo hacerlo.

Nota: Debería hacer referencia a una copia de la biblioteca que copió en su área de trabajo de desarrollo; no debe hacer referencia a la biblioteca directamente desde el directorio de Android SDK .

Solución: no haga la copia manualmente. En su lugar, solo marque la casilla en Eclipse que dice “Copiar proyectos en el área de trabajo”

Lo hice así y todo funcionó de nuevo.

Gracias a esta pregunta de StackOverFlow: Cómo solucionar la instalación de la biblioteca de Google Play Services 2 en Eclipse (Admob es parte de Google Play Services)

Esto porque ProGuard. Para usar ProGuard de forma segura con Google Mobile Ads, agregue lo siguiente a su configuración de ProGuard:

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