Erreur Admob dans Eclipse pour Android: configChanges

131

Eclipse me donne une erreur sur la ligne android: configChanges dans mon AndroidManifest.xml:

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

l'erreur est:

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

Si je laisse seulement, keyboard|keyboardHidden|orientationil n'y a pas d'erreur, mais le compilateur demande les 4 restants lorsque j'essaye de construire.

J'utilise GoogleAdMobAdsSDK-4.3.1.

Des idées?

EDIT: Je l'ai fait fonctionner en changeant mon fichier project.properties ( default.properties sur le SDK inférieur à 14) en:

# Project target.
target=android-14

et dans mon SDK Manager ayant la plate-forme SDK Android 4.0 - Révision 14 installée.

Cela devrait également fonctionner pour SDK Platform android 3.2 - révision 13 , il vous suffit donc de changer la cible project.properties en android-13 si tel est le cas. En gros, vous devez simplement vous assurer que la révision du SDK est 13 ou supérieure, et que ce SDK est installé dans le gestionnaire de SDK et que la cible du projet dans default / project.properties pointe vers elle.

Mark Cameron
la source
quelle version d'Android utilisez-vous?
HefferWolf
Min SDK version 7 - Android 2.1
Mark Cameron
J'ai essayé de changer la cible à 13, mais cela ne fonctionne pas. Quelle pourrait être la raison?
Anirudh
@anirudhmaddy avez-vous utilisé "android: configChanges =" keyboard | keyboardHidden | orientation | screenLayout | uiMode | screenSize | smallestScreenSize "ou plus court? Si vous changez votre cible au-dessus de 13 et utilisez un configChanges plus long, cela devrait fonctionner.
Gürcan Kavakçı
@ gurcan15 yup ça marche maintenant.
Anirudh

Réponses:

74

Réponse simple: les changements de configuration mentionnés ne sont pas pris en charge dans Android 2.1, regardez ici:

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

Par exemple, uiMode nécessite le niveau d'API 8.

À partir de la documentation officielle d'AdMob:

Exigences

Le SDK Google AdMob Ads pour Android nécessite Android 1.5 ou une version ultérieure. Assurez-vous que vous disposez de la dernière copie du SDK Android et que vous compilez au moins avec Android v3.2 (définissez la cible dans default.properties sur android-13).

jetez un œil ici: https://developers.google.com/admob/android/quick-start

Je pense donc que la version de vos outils n'est pas mise à jour au moins vers la version 13.

HefferWolf
la source
J'ai changé <uses-sdk android:minSdkVersion="7"/>pour la version 8, 9, 10, 11, 12 ... j'ai toujours l'erreur ... j'ai également essayé de supprimer la ligne et cela me donne toujours l'erreur.
Mark Cameron
9
screenSize et smallestScreenSize sont uniquement pris en charge dans le niveau d'API 13, ce qui signifie Honeycomb, êtes-vous sûr d'en avoir besoin? Comme ils sont assez spécifiques à Honeycomb.
HefferWolf
1
Eh bien, si je ne les déclare pas, j'obtiens ceci dans 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.Et là où l'annonce est censée être, j'obtiens une boîte noire avec le dernier message d'erreur écrit en rouge.
Mark Cameron du
1
J'ai ajouté une note assez importante du SDK à ma réponse ci-dessus.
HefferWolf
D'accord, ma cible default.properties est android-7, je passe à 13, et cela dit Unable to resolve target 'android-13'. J'ai installé "Android SDK Tools, révision 13" dans mon gestionnaire de SDK cependant ...
Mark Cameron
86

Solution facile: (et NON, vous n'avez pas besoin de changer la valeur min-sdk !!)

Étape 1: modifier le fichier "project.properties"

# Project target.
target=android-13

Étape 2: dans Eclipse

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

Pour une explication complète avec un exemple réel, utilisez ce tutoriel http://www.monkeycoder.co.nz/Community/posts.php?topic=1121

À votre santé !

Dax
la source
1
Excellent! J'utilisais moi aussi sdk7 bien que la version google api. J'ai donc utilisé # Project target. target = Google Inc.: API Google: 13 dans mon fichier de propriétés.
travaillé le
18

Pour ceux qui utilisent Eclipse, il existe un moyen plus simple: cliquez avec le bouton droit sur le dossier de votre projet dans le volet de gauche "Explorateur de packages" et cliquez sur Propriétés -> Android -> et dans la liste "Project Build Target", cochez API 13 ou plus.

Remarque: c'est le même effet que l'édition project.propertiesqui est de toute façon générée automatiquement.

Cela construira votre projet avec le SDK Android 3.2 qui inclut les termes qui n'étaient pas reconnus auparavant.

Vous pouvez laisser vos valeurs android:minSdkVersionet targetSdkVersionles mêmes dans votre Manifest.xml.

Soyez averti cependant , si vous ne définissez pas votre targetSdkVersionAPI 12 ou inférieur (ou ne le définissez pas du tout), le système Android supposera que les android:configChangesvaleurs screenSizeet smallestScreenSize(qui ont été introduites dans l'API 13) sont prises en compte et seront donc autorisé à détruire-redémarrer votre activité. Si vous vouliez éviter cela, vous devez inclure ces termes dans vos autres <activity>balises (qui ne l'étaient probablement que keyboard|keyboardHidden|orientationjusqu'à présent).

Cependant, si votre application cible le niveau d'API 12 ou inférieur, votre activité gère toujours cette modification de configuration elle-même (cette modification de configuration ne redémarre pas votre activité, même lorsqu'elle est exécutée sur un appareil Android 3.2 ou supérieur).

La citation est d' ici .

Tony Chan
la source
3

J'ai eu le même problème alors je suis venu ici.
J'ai téléchargé l'exemple de code à partir de https://developers.google.com/admob/android/quick-start , j'ai toujours eu le problème avec toutes les réponses ci-dessus, j'ai donc utilisé le même sdk admob, qu'ils offrent dans l'exemple de projet. Refaites le truc de build jars, change la cible en android-15et utilise la même ligne qu'ils utilisent:

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

Et il fonctionne!

Ahmad Dwaik 'Warlock'
la source
Je pense que c'est la voie à suivre. Parce que, pour moi, comme les Asynctasks sont interrompus de l'API quoi qu'il en soit (ils utilisent maintenant un exécuteur séquentiel au lieu d'un parallèle car ils avaient des `` problèmes '' avec le parallèle), je préfère utiliser une ancienne cible que d'avoir à modifier à la main le exécuteur par défaut ...
Radu
0

As-tu utilisé android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|‌​screenSize|smallestScreenSize

ou plus court? Si vous changez votre cible au-dessus de 13 et utilisez un configChanges plus long (que j'ai écrit), cela devrait fonctionner.

Gürcan Kavakçı
la source
0

Solution simple: remplacez le fichier "project.properties" par 21

# Project target.
target=android-21
Dit Erraoudy
la source
-4

Toutes les nouvelles applications Android créées après le 14 octobre 2011 nécessiteront un SDK AdMob publié le 15 mars 2011 ou après cette date. Cela correspond à la version 4.0.2+ pour Android. Si vous avez téléchargé la bibliothèque à partir de notre site de téléchargement officiel, vous êtes déjà prêt. Sinon, il se peut que vous disposiez d'une ancienne version du SDK AdMob qui a été publiée avant le 15 mars 2011 et que votre nouvelle application ne recevra aucune impression d'annonce tant que vous n'aurez pas mis à jour votre SDK.

Sando
la source
Vous venez de copier-coller des éléments du réseau Internet sans le comprendre. Cela n'a aucun rapport avec le problème réel.
Torben