Erro do Admob no Eclipse para android: configChanges


131

O Eclipse está me dando um erro na linha android: configChanges no meu AndroidManifest.xml:

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

o erro é:

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

Se eu sair apenas keyboard|keyboardHidden|orientationnão há erro, mas o compilador pede os quatro restantes quando eu tento construir.

Estou usando GoogleAdMobAdsSDK-4.3.1.

Alguma ideia?

EDIT: Eu consegui mudar o meu arquivo project.properties ( default.properties no SDK inferior a 14) para:

# Project target.
target=android-14

e no meu SDK Manager, com a plataforma SDK Android 4.0 - Revisão 14 instalada.

Ele também deve funcionar no SDK Platform android 3.2 - revisão 13 , portanto, você só precisa alterar o destino project.properties para android-13, se for esse o caso. Basicamente, você só precisa garantir que a revisão do SDK seja 13 ou superior e que o SDK esteja instalado no gerenciador do SDK e o destino do projeto em default / project.properties apontando para ele.


qual versão do android você usa?
HefferWolf 26/10/11

Min SDK versão 7 - Android 2.1
Mark Cameron

Tentei mudar o alvo para 13, mas não está funcionando .. qual poderia ser o motivo?
Anirudh 11/11/12

@anirudhmaddy você usou "android: configChanges =" teclado | tecladoHidden | orientação | screenLayout | uiMode | screenSize | smallestScreenSize "ou menor? Se você alterar seu destino acima de 13 e usar configurações mais longas, deve funcionar.
Gürcan Kavakçı

@ gurcan15 yup está funcionando agora.
Anirudh

Respostas:


74

Resposta simples: as alterações de configuração mencionadas não são suportadas no Android 2.1, dê uma olhada aqui:

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

por exemplo, o uiMode precisa do nível 8 da API.

Da documentação oficial da AdMob:

Exigências

O SDK de anúncios do Google AdMob para Android requer o Android 1.5 ou posterior. Verifique se você possui a cópia mais recente do Android SDK e se está compilando com pelo menos o Android v3.2 (defina o destino em default.properties para android-13).

dê uma olhada aqui: https://developers.google.com/admob/android/quick-start

Portanto, acho que a versão da sua ferramenta não foi atualizada para pelo menos a Versão 13.


Mudei <uses-sdk android:minSdkVersion="7"/>para a versão 8, 9, 10, 11, 12 ... ainda tenho o erro ... também tentei remover a linha e ainda me dá o erro.
Mark Cameron

9
screenSize e smallestScreenSize são suportados apenas na API Nível 13, o que significa Honeycomb, você tem certeza de que precisa deles? Como eles são bastante específicos do favo de mel.
HefferWolf 26/10/11

1
Bem, se eu não os declarar, recebo isso no 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.e onde o anúncio deve estar, recebo uma caixa preta com a última mensagem de erro escrita em vermelho.
Mark Cameron

1
Adicionei uma observação muito importante do SDK à minha resposta acima.
HefferWolf 26/10/11

Ok, meu destino default.properties é android-7, mudo para 13 e diz Unable to resolve target 'android-13'. Eu tenho o "Android SDK Tools, revisão 13" instalado no meu gerenciador de SDK ...
Mark Cameron

86

Solução fácil: (e NÃO, você não precisa alterar o valor min-sdk !!)

Etapa 1: Alterar o arquivo "project.properties"

# Project target.
target=android-13

Etapa 2: No Eclipse

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

Para obter uma explicação completa com exemplo real, use este tutorial http://www.monkeycoder.co.nz/Community/posts.php?topic=1121

Felicidades !


1
Excelente! Eu também estava usando sdk7, embora a versão da API do Google. Então eu usei # Project target. target = Google Inc.: APIs do Google: 13 no meu arquivo de propriedades.
trabalhei

18

Para aqueles que usam o Eclipse, há uma maneira mais fácil: Clique com o botão direito do mouse na pasta do projeto no painel esquerdo do "Package Explorer" e clique em Propriedades -> Android -> e, na lista "Destino da Construção do Projeto", desmarque a API 13 ou superior.

Nota: esse é o mesmo efeito da edição, project.propertiesque é gerada automaticamente de qualquer maneira.

Isso criará seu projeto com relação ao SDK do Android 3.2, que inclui os termos que não foram reconhecidos anteriormente.

Você pode deixar seus android:minSdkVersione targetSdkVersionvalores iguais em seu Manifest.xml.

Entretanto , esteja avisado : se você não definir targetSdkVersiona API 12 ou inferior (ou não definir), o sistema Android assumirá que os android:configChangesvalores screenSizee smallestScreenSize(que foram introduzidos na API 13) são contabilizados e, portanto, serão permissão para destruir-reiniciar sua atividade. Se você quiser evitar isso, inclua esses termos em suas outras <activity>tags (que provavelmente só existiam keyboard|keyboardHidden|orientationaté agora).

No entanto, se seu aplicativo atingir o nível 12 ou inferior da API, sua atividade sempre lida com essa alteração de configuração (ela não reinicia sua atividade, mesmo quando executada em um dispositivo Android 3.2 ou superior).

A citação é daqui .


3

Eu tive o mesmo problema, então vim aqui.
Fiz o download do código de exemplo em https://developers.google.com/admob/android/quick-start , ainda tinha o problema com todas as respostas acima, então usei o mesmo admob sdk que eles oferecem no projeto de amostra. Refaça a coisa de construir frascos, altere o destino para android-15e use a mesma linha que eles usam:

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

E funciona!


Eu acho que esse é o caminho a percorrer. Porque, para mim, como as Assíncronas são quebradas da API em qualquer momento (agora elas usam um executor seqüencial em vez de um paralelo porque tinham 'problemas' com o paralelo), prefiro usar um destino antigo do que ter que modificar manualmente o executor padrão ...
Radu

0

Você usou android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|‌​screenSize|smallestScreenSize

ou mais curto? Se você alterar seu alvo acima de 13 e usar um configChanges mais longo (que eu escrevi), ele deverá funcionar.


0

Solução fácil: altere o arquivo "project.properties" para 21

# Project target.
target=android-21

-4

Todos os novos aplicativos para Android criados após 14 de outubro de 2011 exigirão um SDK da AdMob que foi lançado em ou após 15 de março de 2011. Isso corresponde à versão 4.0.2+ para Android. Se você baixou a biblioteca do site oficial de download, já está pronto. Caso contrário, você poderá ter uma versão antiga do SDK da AdMob que foi lançada antes de 15 de março de 2011, e seu novo aplicativo não receberá impressões de anúncios até que você atualize seu SDK.


Você acabou de copiar e colar coisas da Internet sem entender. Isso não tem relevância para o problema real.
Torben
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.