Błąd AdMob w Eclipse dla Androida: configChanges

131

Eclipse daje mi błąd w wierszu android: configChanges w moim AndroidManifest.xml:

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

błąd to:

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

Jeśli zostawię tylko, keyboard|keyboardHidden|orientationnie ma błędu, ale kompilator prosi o 4 pozostałe, gdy próbuję budować.

Używam GoogleAdMobAdsSDK-4.3.1.

Jakieś pomysły?

EDYCJA: Sprawiłem, że działa, zmieniając plik project.properties ( default.properties w SDK niższym niż 14) na:

# Project target.
target=android-14

oraz w moim menedżerze SDK z zainstalowaną platformą SDK Android 4.0 - wersja 14 .

Powinien również działać na platformie SDK Android 3.2 - wersja 13 , więc w takim przypadku wystarczy zmienić target project.properties na android-13 . Zasadniczo musisz tylko upewnić się, że wersja SDK to 13 lub nowsza i że masz ten zestaw SDK zainstalowany w menedżerze SDK i cel projektu w default / project.properties wskazujący na to.

Mark Cameron
źródło
której wersji Androida używasz?
HefferWolf
Min SDK w wersji 7 - Android 2.1
Mark Cameron
Próbowałem zmienić cel na 13, ale to nie działa… co może być tego przyczyną?
Anirudh,
@anirudhmaddy, czy użyłeś "android: configChanges =" keyboard | keyboardHidden | Orientation | screenLayout | uiMode | screenSize | smallestScreenSize "lub krótszego? Jeśli zmienisz cel powyżej 13 i użyjesz dłuższej configChanges jeden, powinno działać.
Gürcan Kavakçı
@ gurcan15 tak, teraz działa.
Anirudh,

Odpowiedzi:

74

Prosta odpowiedź: wspomniane zmiany konfiguracji nie są obsługiwane w systemie Android 2.1, zajrzyj tutaj:

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

np. uiMode wymaga API Level 8.

Z oficjalnej dokumentacji AdMob:

Wymagania

Pakiet Google AdMob Ads SDK na Androida wymaga systemu Android 1.5 lub nowszego. Upewnij się, że masz najnowszą kopię Android SDK i że kompilujesz na co najmniej Android v3.2 (ustaw cel w default.properties na android-13).

zajrzyj tutaj: https://developers.google.com/admob/android/quick-start

Więc myślę, że twoja wersja narzędzi nie została zaktualizowana przynajmniej do wersji 13.

HefferWolf
źródło
Zmieniłem <uses-sdk android:minSdkVersion="7"/>na wersję 8, 9, 10, 11, 12 ... nadal mam błąd ... również próbowałem usunąć linię i nadal daje mi błąd.
Mark Cameron
9
screenSize i smallestScreenSize są obsługiwane tylko na poziomie API 13, co oznacza Honeycomb, czy na pewno ich potrzebujesz? Ponieważ są one dość specyficzne dla plastra miodu.
HefferWolf
1
Cóż, jeśli ich nie zadeklaruję, dostaję to w 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.A tam, gdzie ma być reklama, otrzymuję czarne pudełko z ostatnim komunikatem o błędzie zapisanym na czerwono.
Mark Cameron
1
Dodałem dość ważną uwagę z SDK do mojej odpowiedzi powyżej.
HefferWolf
Okay, moim celem default.properties jest android-7, zmieniam na 13 i jest napisane Unable to resolve target 'android-13'. Mam jednak „Android SDK Tools, wersja 13” zainstalowany w moim menedżerze SDK ...
Mark Cameron
86

Proste rozwiązanie: (i NIE, nie musisz zmieniać wartości min-sdk !!)

Krok 1: Zmień plik „project.properties”

# Project target.
target=android-13

Krok 2: W Eclipse

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

Aby uzyskać pełne wyjaśnienie z rzeczywistym przykładem, skorzystaj z tego samouczka http://www.monkeycoder.co.nz/Community/posts.php?topic=1121

Twoje zdrowie !

Dax
źródło
1
Świetny! Ja też korzystałem z SDK7, chociaż wersja Google API. Więc użyłem # Project target. target = Google Inc.:Google API: 13 w moim pliku właściwości.
pracował
18

Dla tych, którzy używają Eclipse jest prostszy sposób: kliknij prawym przyciskiem folder projektu w lewym okienku "Eksplorator pakietów" i kliknij Właściwości -> Android -> i na liście "Project Build Target" zaznacz API 13 lub wyżej.

Uwaga: jest to ten sam efekt, co edycja, project.propertiesktóra i tak jest generowana automatycznie.

Spowoduje to skompilowanie projektu na podstawie zestawu SDK systemu Android 3.2, który zawiera warunki, które były wcześniej nierozpoznane.

Możesz pozostawić te same wartości android:minSdkVersioni targetSdkVersionw swoim pliku Manifest.xml.

Ostrzegamy jednak , że jeśli nie ustawisz targetSdkVersionAPI 12 lub niższego (lub w ogóle go nie ustawisz), system Android przyjmie, że android:configChangeswartości screenSizei smallestScreenSize(które zostały wprowadzone w API 13) są uwzględnione i dlatego będą mieć pozwolenie na zniszczenie - ponowne uruchomienie Twojej działalności. Jeśli chcesz tego uniknąć, musisz uwzględnić te terminy w innych <activity>tagach (które prawdopodobnie miały tylko keyboard|keyboardHidden|orientationdo tej pory).

Jeśli jednak Twoja aplikacja jest przeznaczona dla interfejsu API na poziomie 12 lub niższym, aktywność zawsze sama obsługuje tę zmianę konfiguracji (ta zmiana konfiguracji nie powoduje ponownego uruchomienia działania, nawet jeśli jest uruchomiona na urządzeniu z systemem Android 3.2 lub nowszym).

Cytat jest stąd .

Tony Chan
źródło
3

Miałem ten sam problem, więc przyjechałem tutaj. Pobrałem
przykładowy kod z https://developers.google.com/admob/android/quick-start , nadal miałem problem ze wszystkimi powyższymi odpowiedziami, więc użyłem tego samego sdk admob, który oferują w przykładowym projekcie. Ponownie wykonaj polecenie build jars, zmieniłem cel na android-15i użyj tej samej linii, której używają:

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

I to działa!

Ahmad Dwaik „Warlock”
źródło
Myślę, że to jest droga. Ponieważ dla mnie, ponieważ asynctasks są zerwane z API niezależnie od tego (używają teraz sekwencyjnego executora zamiast równoległego, ponieważ mieli `` problemy '' z równoległym), wolę używać starego celu, niż musieć ręcznie modyfikować domyślny executor ...
Radu
0

Czy używałeś android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|‌​screenSize|smallestScreenSize

czy krótszy? Jeśli zmienisz cel powyżej 13 i użyjesz dłuższego configChanges (o którym napisałem), powinno działać.

Gürcan Kavakçı
źródło
0

Proste rozwiązanie: zmień plik „project.properties” na 21

# Project target.
target=android-21
Said Erraoudy
źródło
-4

Wszystkie nowe aplikacje na Androida utworzone po 14 października 2011 r. Będą wymagały pakietu AdMob SDK, który został wydany 15 marca 2011 r. Lub później. Odpowiada to wersji 4.0.2+ na Androida. Jeśli pobrałeś bibliotekę z naszej oficjalnej strony pobierania, to już masz ustawione. W przeciwnym razie możesz mieć starą wersję pakietu AdMob SDK wydaną przed 15 marca 2011 r., A nowa aplikacja nie będzie otrzymywać żadnych wyświetleń reklam, dopóki nie zaktualizujesz pakietu SDK.

Sando
źródło
Po prostu skopiowałeś i wkleiłeś rzeczy z Internetu bez zrozumienia tego. Nie ma to żadnego związku z rzeczywistym problemem.
Torben,