Admob-Fehler in Eclipse für Android: configChanges


131

Eclipse gibt mir einen Fehler in der Zeile android: configChanges in meiner AndroidManifest.xml:

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

Der Fehler ist:

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

Wenn ich nur keyboard|keyboardHidden|orientationgehe, gibt es keinen Fehler, aber der Compiler fragt nach den 4 verbleibenden, wenn ich versuche zu bauen.

Ich benutze GoogleAdMobAdsSDK-4.3.1.

Irgendwelche Ideen?

BEARBEITEN: Ich habe es zum Laufen gebracht, indem ich meine Datei project.properties ( default.properties in SDKs unter 14) in Folgendes geändert habe :

# Project target.
target=android-14

und in meinem SDK-Manager , auf dem die SDK-Plattform Android 4.0 - Revision 14 installiert ist.

Es sollte auch für SDK Platform Android 3.2 - Revision 13 funktionieren , sodass Sie in diesem Fall nur das Ziel project.properties in android-13 ändern müssen . Grundsätzlich müssen Sie nur sicherstellen, dass die SDK-Version 13 oder höher ist und dass Sie das SDK im SDK-Manager installiert haben und das Projektziel in default / project.properties darauf verweisen.


Welche Android-Version benutzt du?
HefferWolf

Min SDK Version 7 - Android 2.1
Mark Cameron

Ich habe versucht, das Ziel auf 13 zu ändern, aber es funktioniert nicht. Was könnte der Grund sein?
Anirudh

@anirudhmaddy hast du "android: configChanges =" keyboard | keyboardHidden | Orientierung | screenLayout | uiMode | screenSize | kleinsteScreenSize "oder kürzere verwendet? Wenn du dein Ziel über 13 änderst und längere configChanges eins verwendest, sollte es funktionieren.
Gürcan Kavakçı

@ gurcan15 yup es funktioniert jetzt.
Anirudh

Antworten:


74

Einfache Antwort: Die genannten Konfigurationsänderungen werden in Android 2.1 nicht unterstützt. Schauen Sie hier:

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

zB benötigt uiMode API Level 8.

Aus der offiziellen AdMob-Dokumentation:

Bedarf

Für das Google AdMob Ads SDK für Android ist Android 1.5 oder höher erforderlich. Stellen Sie sicher, dass Sie über die neueste Version des Android SDK verfügen und mindestens Android v3.2 kompilieren (setzen Sie das Ziel in default.properties auf android-13).

Schauen Sie hier: https://developers.google.com/admob/android/quick-start

Daher denke ich, dass Ihre Tool-Version nicht auf mindestens Version 13 aktualisiert wurde.


Ich habe <uses-sdk android:minSdkVersion="7"/>auf Version 8, 9, 10, 11, 12 gewechselt ... habe immer noch den Fehler ... habe auch versucht, die Zeile zu entfernen und es gibt mir immer noch den Fehler.
Mark Cameron

9
screenSize und smallScreenSize werden nur in API Level 13 unterstützt, dh Honeycomb. Sind Sie sicher, dass Sie sie benötigen? Da sie ziemlich wabenspezifisch sind.
HefferWolf

1
Wenn ich sie nicht deklariere, erhalte ich dies in 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.Und wo die Anzeige sein soll, erhalte ich eine Blackbox mit der letzten rot geschriebenen Fehlermeldung.
Mark Cameron

1
Ich habe meiner obigen Antwort einen ziemlich wichtigen Hinweis aus dem SDK hinzugefügt.
HefferWolf

Okay, mein default.properties-Ziel ist Android-7, ich wechsle zu 13 und es heißt Unable to resolve target 'android-13'. Ich habe "Android SDK Tools, Revision 13" in meinem SDK-Manager installiert ...
Mark Cameron

86

Einfache Lösung: (und NEIN, Sie müssen den min-sdk-Wert nicht ändern !!)

Schritt 1: Ändern Sie die Datei "project.properties"

# Project target.
target=android-13

Schritt 2: In Eclipse

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

Für eine vollständige Erklärung mit einem realen Beispiel verwenden Sie dieses Tutorial http://www.monkeycoder.co.nz/Community/posts.php?topic=1121

Prost !


1
Ausgezeichnet! Ich habe auch SDK7 verwendet, obwohl die Google API-Version. Also habe ich # Project target verwendet. target = Google Inc .: Google APIs: 13 in meiner Eigenschaftendatei.
arbeitete

18

Für Benutzer von Eclipse gibt es einen einfacheren Weg: Klicken Sie mit der rechten Maustaste auf Ihren Projektordner im linken Bereich "Paket-Explorer" und klicken Sie auf Eigenschaften -> Android ->. Aktivieren Sie in der Liste "Projekt-Build-Ziel" die Option API 13 oder höher.

Hinweis: Dies ist der gleiche Effekt wie die Bearbeitung, project.propertiesdie ohnehin automatisch generiert wird.

Dadurch wird Ihr Projekt mit dem Android 3.2 SDK erstellt, das die zuvor nicht erkannten Begriffe enthält.

Sie können Ihre android:minSdkVersionund verlassentargetSdkVersion Werte in Ihrer Manifest.xml belassen.

Seien Sie jedoch gewarnt , wenn Sie Ihre nicht targetSdkVersionauf API 12 oder niedriger einstellen (oder überhaupt nicht einstellen), geht das Android-System davon aus, dass die android:configChangesWerte screenSizeund smallestScreenSize(die in API 13 eingeführt wurden) berücksichtigt werden und somit berücksichtigt werden darf deine Aktivität zerstören - neu starten. Wenn Sie dies vermeiden möchten, müssen Sie diese Begriffe in Ihre anderen <activity>Tags aufnehmen (die wahrscheinlich nur keyboard|keyboardHidden|orientationbis jetzt vorhanden waren).

Wenn Ihre Anwendung jedoch auf API-Stufe 12 oder niedriger abzielt, behandelt Ihre Aktivität diese Konfigurationsänderung immer selbst (diese Konfigurationsänderung startet Ihre Aktivität nicht neu, selbst wenn sie auf einem Android 3.2-Gerät oder höher ausgeführt wird).

Zitat ist von hier .


3

Ich hatte das gleiche Problem, also kam ich hierher.
Ich habe den Beispielcode von https://developers.google.com/admob/android/quick-start heruntergeladen. Ich hatte immer noch das Problem mit allen obigen Antworten, also habe ich das gleiche Admob SDK verwendet, das sie im Beispielprojekt anbieten. Wiederholen Sie die Build Jars-Sache, ändern Sie das Ziel in android-15und verwenden Sie dieselbe Zeile, die sie verwenden:

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

Und es funktioniert!


Ich denke, das ist der richtige Weg. Da für mich Asynctasks ab sofort von der API getrennt sind (sie verwenden jetzt einen sequentiellen Executor anstelle eines parallelen, weil sie Probleme mit dem parallelen hatten), verwende ich lieber ein altes Ziel, als das von Hand ändern zu müssen Standard Executor ...
Radu

0

Hast du benutzt android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|‌​screenSize|smallestScreenSize

oder kürzer? Wenn Sie Ihr Ziel über 13 ändern und einen längeren configChanges verwenden (den ich geschrieben habe), sollte es funktionieren.


0

Einfache Lösung: Ändern Sie die Datei "project.properties" in 21

# Project target.
target=android-21

-4

Für alle neuen Android-Apps, die nach dem 14. Oktober 2011 erstellt wurden, ist ein AdMob SDK erforderlich, das am oder nach dem 15. März 2011 veröffentlicht wurde. Dies entspricht der Version 4.0.2+ für Android. Wenn Sie die Bibliothek von unserer offiziellen Download-Site heruntergeladen haben, sind Sie bereits eingestellt. Andernfalls verfügen Sie möglicherweise über eine alte Version des AdMob SDK, die vor dem 15. März 2011 veröffentlicht wurde, und Ihre neue App erhält keine Anzeigenimpressionen, bis Sie Ihr SDK aktualisieren.


Sie haben nur Inhalte aus dem Internet kopiert, ohne sie zu verstehen. Dies hat keine Relevanz für das eigentliche Problem.
Torben
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.