Error de Admob en Eclipse para Android: configChanges

131

Eclipse me está dando un error en la línea android: configChanges en mi AndroidManifest.xml:

<activity android:name="com.google.ads.AdActivity"
              android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"></activity>

el error es:

error: Error: String types not allowed (at 'configChanges' with value 'keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize').

Si me voy solo, keyboard|keyboardHidden|orientationno hay error, pero el compilador pide los 4 restantes cuando intento compilar.

Estoy usando GoogleAdMobAdsSDK-4.3.1.

¿Algunas ideas?

EDITAR: Lo hice funcionar cambiando mi archivo project.properties ( default.properties en el SDK inferior a 14) a:

# Project target.
target=android-14

y en mi SDK Manager con la plataforma SDK Android 4.0 - Revisión 14 instalada.

También debería funcionar para la plataforma SDK android 3.2 - revisión 13 , por lo que solo tiene que cambiar el objetivo project.properties a android-13 si ese es el caso. Básicamente, solo debe asegurarse de que la revisión del SDK sea 13 o superior, y que tenga ese SDK instalado en el administrador del SDK y el objetivo del proyecto en default / project.properties que lo apuntan.

Mark Cameron
fuente
¿Qué versión de Android usas?
HefferWolf
Min SDK versión 7 - Android 2.1
Mark Cameron
Traté de cambiar el objetivo a 13, pero no funciona ... ¿cuál podría ser la razón?
Anirudh
@anirudhmaddy, ¿usó "android: configChanges =" keyboard | keyboardHidden | orientación | screenLayout | uiMode | screenSize | smallestScreenSize "o uno más corto? Si cambia su objetivo por encima de 13 y usa uno más largo de configChanges, debería funcionar.
Gürcan Kavakçı
@ gurcan15 sí está funcionando ahora.
Anirudh

Respuestas:

74

Respuesta simple: los cambios de configuración mencionados no son compatibles con Android 2.1, eche un vistazo aquí:

http://developer.android.com/guide/topics/manifest/activity-element.html#config

Por ejemplo, uiMode necesita API Nivel 8.

De la documentación oficial de AdMob:

Requisitos

El SDK de anuncios de Google AdMob para Android requiere Android 1.5 o posterior. Asegúrese de tener la última copia del SDK de Android y de que está compilando al menos con Android v3.2 (establezca el destino en default.properties en android-13).

echa un vistazo aquí: https://developers.google.com/admob/android/quick-start

Así que creo que su versión de herramientas no se actualiza al menos a la Versión 13.

HefferWolf
fuente
Cambié <uses-sdk android:minSdkVersion="7"/>a la versión 8, 9, 10, 11, 12 ... todavía tengo el error ... también intenté eliminar la línea y todavía me da el error.
Mark Cameron
9
screenSize y smallestScreenSize solo son compatibles con API Level 13, lo que significa Honeycomb, ¿estás seguro de que los necesitas? Como son bastante específicos de Honeycomb.
HefferWolf
1
Bueno, si no los declaro, obtengo esto en LogCat: The android:configChanges value of the com.google.ads.AdActivity must include screenLayout. The android:configChanges value of the com.google.ads.AdActivity must include uiMode. The android:configChanges value of the com.google.ads.AdActivity must include screenSize. The android:configChanges value of the com.google.ads.AdActivity must include smallestScreenSize. You must have AdActivity declared in AndroidManifest.xml with configChanges.y donde está destinado el anuncio, aparece un cuadro negro con el último mensaje de error escrito en rojo.
Mark Cameron
1
He agregado una nota bastante importante del SDK a mi respuesta anterior.
HefferWolf
De acuerdo, mi objetivo default.properties es android-7, cambio a 13 y dice Unable to resolve target 'android-13'. Aunque tengo "Android SDK Tools, revision 13" instalado en mi administrador de SDK ...
Mark Cameron
86

Solución fácil: (¡y NO, no necesita cambiar el valor min-sdk!)

Paso 1: Cambiar el archivo "project.properties"

# Project target.
target=android-13

Paso 2: en Eclipse

Project > Clean... > (select your project) > Clean projects selected below > OK

Para obtener una explicación completa con ejemplos reales, use este tutorial http://www.monkeycoder.co.nz/Community/posts.php?topic=1121

Salud !

Dax
fuente
1
¡Excelente! Yo también estaba usando SDK7, aunque la versión de la API de Google. Entonces usé # Objetivo del proyecto. target = Google Inc.: API de Google: 13 en mi archivo de propiedades.
trabajó el
18

Para aquellos que usan Eclipse, hay una manera más fácil: haga clic con el botón derecho en la carpeta del proyecto en el panel izquierdo "Explorador de paquetes" y haga clic en Propiedades -> Android -> y en la lista "Destino de compilación del proyecto" marque API 13 o superior.

Nota: este es el mismo efecto que la edición, project.propertiesque de todos modos se genera automáticamente.

Esto construirá su proyecto contra el SDK de Android 3.2 que incluye los términos que antes no se reconocían.

Puede dejar sus valores android:minSdkVersiony targetSdkVersionlos mismos en su Manifest.xml.

Sin embargo , tenga en cuenta que si no configura su targetSdkVersionAPI 12 o inferior (o no la configura), el sistema Android asumirá que los android:configChangesvalores screenSizey smallestScreenSize(que se introdujeron en API 13) se tienen en cuenta y, por lo tanto, serán permitido destruir-reiniciar su actividad. Si desea evitar esto, debe incluir esos términos en sus otras <activity>etiquetas (que probablemente solo tenía keyboard|keyboardHidden|orientationhasta ahora).

Sin embargo, si su aplicación apunta al nivel API 12 o inferior, entonces su actividad siempre maneja este cambio de configuración por sí mismo (este cambio de configuración no reinicia su actividad, incluso cuando se ejecuta en un dispositivo Android 3.2 o superior).

La cita es de aquí .

Tony Chan
fuente
3

Tuve el mismo problema, así que vine aquí.
He descargado el código de muestra de https://developers.google.com/admob/android/quick-start , todavía tenía el problema con todas las respuestas anteriores, así que utilicé el mismo sdk de Admob, que ofrecen en el proyecto de muestra. Rehace lo de los frascos de compilación, cambia el objetivo a android-15y usa la misma línea que usan:

<activity android:name="com.google.ads.AdActivity" 
              android:configChanges="keyboard|keyboardHidden|orientation"/>

¡Y funciona!

Ahmad Dwaik 'Brujo'
fuente
Creo que ese es el camino a seguir. Porque, para mí, dado que los Asynctasks están separados de la API en adelante (usan ahora un ejecutor secuencial en lugar de uno paralelo porque tenían 'problemas' con el paralelo), prefiero usar un objetivo antiguo que tener que modificar a mano el ejecutor predeterminado ...
Radu
0

Usaste android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|‌​screenSize|smallestScreenSize

o uno más corto? Si cambia su objetivo por encima de 13 y usa configChanges más largo (que escribí), debería funcionar.

Gürcan Kavakçı
fuente
0

Solución fácil: cambie el archivo "project.properties" a 21

# Project target.
target=android-21
Dijo Erraoudy
fuente
-4

Todas las nuevas aplicaciones de Android creadas después del 14 de octubre de 2011 requerirán un SDK de AdMob que se lanzó el 15 de marzo de 2011 o después de este año. Si descargó la biblioteca de nuestro sitio oficial de descargas, ya está listo. De lo contrario, es posible que tenga una versión anterior del SDK de AdMob que se lanzó antes del 15 de marzo de 2011, y su nueva aplicación no recibirá ninguna impresión de anuncios hasta que actualice su SDK.

Sando
fuente
Simplemente copia cosas pegadas de Internet sin comprenderlo. Esto no tiene relevancia para el problema real.
Torben