Ошибка Admob в Eclipse для Android: configChanges

131

Eclipse выдает ошибку в строке android: configChanges в моем AndroidManifest.xml:

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

ошибка:

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

Если я оставлю только keyboard|keyboardHidden|orientationошибку, компилятор запросит 4 оставшихся при попытке сборки.

Я использую GoogleAdMobAdsSDK-4.3.1.

Любые идеи?

РЕДАКТИРОВАТЬ: я получил его, изменив файл project.properties ( default.properties в SDK ниже 14) на:

# Project target.
target=android-14

и в моем диспетчере SDK с установленной SDK Platform Android 4.0 - Revision 14 .

Он также должен работать для SDK Platform android 3.2 - revision 13 , поэтому вам просто нужно изменить цель project.properties на android-13, если это так. В основном вам просто нужно убедиться, что версия SDK 13 или выше, и что у вас есть этот SDK, установленный в диспетчере SDK, и цель проекта в default / project.properties, указывающая на него.

Марк Кэмерон
источник
какую версию Android вы используете?
HefferWolf
Минимальная версия SDK 7 - Android 2.1
Марк Кэмерон,
Я попытался изменить цель на 13, но не работает .. в чем может быть причина?
Anirudh
@anirudhmaddy, вы использовали "android: configChanges =" keyboard | keyboardHidden | Ориентация | screenLayout | uiMode | screenSize | smallestScreenSize "или короче? Если вы измените свою цель выше 13 и используете более длинную configChanges, она должна работать.
Гюркан Кавакчи
@ gurcan15 да, теперь он работает.
Anirudh

Ответы:

74

Простой ответ: упомянутые изменения конфигурации не поддерживаются в Android 2.1, посмотрите здесь:

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

например, uiMode требует API уровня 8.

Из официальной документации AdMob:

Требования

SDK Google AdMob Ads для Android требует Android 1.5 или более поздней версии. Убедитесь, что у вас есть последняя копия Android SDK и что вы компилируете как минимум под Android v3.2 (установите target в default.properties на android-13).

посмотрите здесь: https://developers.google.com/admob/android/quick-start

Поэтому я думаю, что ваша версия инструментов не обновлена ​​как минимум до версии 13.

HefferWolf
источник
Я перешел <uses-sdk android:minSdkVersion="7"/>на версию 8, 9, 10, 11, 12 ... все еще есть ошибка ... также попытался удалить строку, но она все еще выдает ошибку.
Марк Кэмерон,
9
screenSize и smallestScreenSize поддерживаются только на уровне API 13, что означает Honeycomb, вы уверены, что они вам нужны? Поскольку они довольно специфичны для сотовых сетей.
HefferWolf
1
Что ж, если я не объявляю их, я получаю это в 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.И там, где должно быть объявление, я получаю черный ящик с последним сообщением об ошибке, написанным в нем красным.
Марк Кэмерон,
1
К своему ответу я добавил очень важную заметку из SDK.
HefferWolf
Хорошо, моя цель default.properties - android-7, я меняю на 13, и он говорит Unable to resolve target 'android-13'. У меня в диспетчере SDK установлены «Инструменты Android SDK, ревизия 13» ...
Марк Кэмерон,
86

Простое решение: (и НЕТ, вам не нужно изменять значение min-sdk !!)

Шаг 1. Измените файл project.properties

# Project target.
target=android-13

Шаг 2: в Eclipse

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

Для полного объяснения с реальным примером используйте это руководство http://www.monkeycoder.co.nz/Community/posts.php?topic=1121

Ура!

Dax
источник
1
Превосходно! Я тоже использовал sdk7, хотя и версию google api. Поэтому я использовал # Project target. target = Google Inc.:Google API: 13 в моем файле свойств.
работает
18

Для тех, кто использует Eclipse, есть более простой способ: щелкните правой кнопкой мыши папку проекта на левой панели «Package Explorer» и выберите «Свойства» -> «Android» -> и в списке «Project Build Target» отметьте API 13 или выше.

Примечание: это тот же эффект, что и редактирование, project.propertiesкоторое в любом случае создается автоматически.

В результате ваш проект будет построен на основе Android 3.2 SDK, который включает термины, которые ранее не распознавались.

Вы можете оставить ваше android:minSdkVersionи targetSdkVersionзначение то же самое в вашем Manifest.xml.

Однако будьте осторожны , если вы не установите targetSdkVersionAPI 12 или ниже (или не установите его вообще), система Android будет считать, что android:configChangesзначения screenSizeи smallestScreenSize(которые были введены в API 13) учтены и, следовательно, будут разрешено уничтожить-перезапустить вашу деятельность. Если вы хотите избежать этого, вы должны включить эти термины в другие ваши <activity>теги (которые, вероятно, были только keyboard|keyboardHidden|orientationдо сих пор).

Однако, если ваше приложение нацелено на уровень API 12 или ниже, тогда ваше действие всегда обрабатывает это изменение конфигурации само (это изменение конфигурации не перезапускает вашу деятельность, даже при работе на устройстве Android 3.2 или более поздней версии).

Цитата отсюда .

Тони Чан
источник
3

У меня была такая же проблема, поэтому я пришел сюда.
Я загрузил образец кода с https://developers.google.com/admob/android/quick-start , у меня все еще была проблема со всеми приведенными выше ответами, поэтому я использовал тот же admob sdk, который они предлагают в образце проекта. Повторите сборку jars, измените цель на android-15и используйте ту же строку, которую они используют:

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

И это работает!

Ахмад Дваик 'Чернокнижник'
источник
Я думаю, это правильный путь. Поскольку для меня, поскольку Asynctasks перестают работать с API и далее (теперь они используют последовательный исполнитель вместо параллельного, потому что у них были `` проблемы '' с параллельным), я предпочитаю использовать старую цель, чем изменять вручную исполнитель по умолчанию ...
Раду
0

Ты использовал android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|‌​screenSize|smallestScreenSize

или короче? Если вы измените цель выше 13 и используете более длинную конфигурацию configChanges (которую я написал), она должна работать.

Гюркан Кавакчи
источник
0

Простое решение: измените файл "project.properties" на 21.

# Project target.
target=android-21
Саид Эрроуди
источник
-4

Для всех новых приложений Android, созданных после 14 октября 2011 г., потребуется SDK AdMob, выпущенный 15 марта 2011 г. или позднее. Это соответствует версии 4.0.2+ для Android. Если вы скачали библиотеку с нашего официального сайта загрузки, значит, все готово. В противном случае у вас может быть старая версия SDK AdMob, выпущенная до 15 марта 2011 г., и ваше новое приложение не будет получать показы рекламы, пока вы не обновите SDK.

Сандо
источник
Вы просто скопировали материал из Интернета, не понимая этого. Это не имеет отношения к реальной проблеме.
Торбен