As bibliotecas não são mais adicionadas ao APK após a atualização para o ADT 22


238

Eu tenho um projeto bastante grande do Android App que faz referência a vários projetos de biblioteca. Tudo estava bem até que eu atualizei o plugin ADT do eclipse para a versão mais recente (v22). Também atualizei o SDK, é claro. Não vejo nenhum erro de compilação no eclipse, mas quando executo o projeto no telefone, recebo um NoClassDefFoundError.

java.lang.NoClassDefFoundError: org.acra.ACRA
....

A biblioteca arca está incluída em um dos projetos da biblioteca referenciada (na pasta libs) e eu posso vê-la nas "Bibliotecas particulares do Android" no explorador de pacotes, também como eu disse, sem erros de compilação. O projeto funciona bem no computador de todos os outros que não atualizaram o ADT.

Eu já tentei várias coisas, incluindo, entre outras:

  • reinstale o SDK do Android
  • faça o download de um novo pacote ADT
  • excluir todo o meu código e obtê-lo novamente do git
  • copie a biblioteca em questão para o projeto do aplicativo
  • comente o código que usa essa biblioteca - eu recebo o mesmo erro para a próxima biblioteca

tudo sem sucesso, então estou ficando realmente desesperado aqui.

Eu ficaria muito feliz se alguém pudesse me dar uma dica sobre como resolver esse problema.

Respostas:


337

Citando Ruas de Boston em seu post adt-dev :

Durante a atualização, o 'Pedido e exportação' das novas 'Bibliotecas particulares do Android' nem sempre é verificado. E o android-support-v4.jar agora está nesta seção 'Bibliotecas particulares do Android'.

Para corrigir isso, vá para 'Solicitar e exportar' e marque 'Bibliotecas privadas do Android'. Atualize / limpe / reconstrua.

Depois de fazer essa 'correção' para um projeto de biblioteca, talvez seja necessário fechar e reabrir qualquer projeto dependendo, porque eles podem não ver essa 'correção' imediatamente.

Dê uma chance e com sorte ele resolverá o seu problema.

insira a descrição da imagem aqui


32
O CommonsWare é como sempre um dos primeiros pioneiros, muito obrigado! :)
Paul Wein

1
Avery nova versão ADT uma nova surpresa;) Espero que o novo sistema de compilação seja melhor. Obrigado CommonsWare
lujop

3
Sou eu, ou parece errado que todos os desenvolvedores [que usam o Eclipse e as bibliotecas] acessem todos os seus projetos de bibliotecas e marquem "Bibliotecas particulares do Android" como Exportadas? Isso me faz pensar que todos nós confundimos a intenção do Google de adicionar esse novo "recurso" em primeiro lugar. Talvez não devamos marcar as Bibliotecas como Exportadas. Talvez devêssemos adicionar quaisquer arquivos jar ausentes diretamente à nossa pasta "libs". Ex: Isso permitiria que meu projeto de biblioteca usasse o mais recente android-support-v4.jar [v13], enquanto o ABS usa internamente o android-support-v4-12.jar.
23413 swooby

2
@swooby: "Sou apenas eu, ou parece errado que todos os desenvolvedores [que usam Eclipse e Bibliotecas] acessem todos os projetos de suas bibliotecas e marquem" Bibliotecas particulares do Android "como Exportadas?" - está "errado" na medida em que é um bug, reconhecido pelas pessoas que escreveram as ferramentas. "Talvez devêssemos adicionar quaisquer arquivos jar ausentes diretamente à nossa pasta" libs "" - ah, você também precisa fazer isso, como fez no ano passado e na mudança. No entanto, você ainda precisa marcar esta caixa de seleção.
CommonsWare

9
@Phillip: AFAIK, são todos os projetos. Mais precisamente, suponho, são todos os projetos que contêm material libs/, mas você também pode verificar isso para todos, caso adicione material a libs/alguns meses depois e se esqueça disso.
CommonsWare

10

Simplesmente verificar as Bibliotecas particulares do Android não era suficiente, eu também tive que instalar as ferramentas de compilação do SDK do Android no Android SDK Manager.


Não posso confirmar que isso é necessário, mas não superei o erro que o SimonSays encontrou antes de instalá-lo. Pode exigir apenas a configuração adequada das caixas de seleção de exportação, conforme descrito acima, mas achei que eu deveria mencionar que fiz ao longo do caminho a instalação das Ferramentas de Compilação.
strangeluck

isso funciona para mim. apenas alterar as preferências do eclipse não é suficiente. você pode precisar conferir as ferramentas de compilação instaladas no Android SDK manager.
Stevens

4

Eu também tive o mesmo problema e o meu adtera 22.0.1. E nenhuma das soluções acima funcionou. Além disso, ao adicionar um projeto de biblioteca externa a um projeto em funcionamento. Sempre verifique a genpasta do projeto em funcionamento e, se houver Rum projeto de biblioteca externa (junto com o nome do pacote), apenas o projeto da biblioteca externa será exportado. E na minha genpasta não packagenamefoi mostrada nenhuma biblioteca externa.

Então eu verifiquei project.properties arquivo e não havia nenhum link de biblioteca externa android.library.reference.1=presente. Então, eu adicionei manualmente a referência da biblioteca externa lá, apesar de ter adicionado project->properties->Java Build Path->Projects->Add. Então, editar manualmente o project.propertiesfez todo o trabalho para mim.

insira a descrição da imagem aqui


1
Eu acho que aconteceu uma vez que o lugar de gui para definir nãoandroid.library.reference.n é , mas sim -> -> -> -> . Uma pegadinha . java build pathprojectpropertiesAndroidLibraryAdd...
N611x007

4

Eu encontrei um problema semelhante, passei cerca de 3 horas, mas nenhuma das decisões propostas aqui não ajudou ... Finalmente, encontrei uma fonte do problema: meus arquivos de projeto e project.properties eram somente leitura. O Eclipse simplesmente ignora silenciosamente quaisquer alterações nas dependências da biblioteca quando eu faço isso na GUI!


3

Eu tive o mesmo problema. Foi por causa do projeto eclipse. Para resolvê-lo, criei um novo projeto no eclipse, copie minhas classes e recursos existentes e iniciei o eclipse novamente e adicionei minhas inclusões personalizadas.


1
Muito aborrecimento, a solução do CommonsWare funcionou para mim e acredito que teria funcionado para você também.
Bilthon

2

Tive o mesmo problema e minha resposta é um pouco diferente da do CommonsWare. Aqui está a minha captura de tela:

insira a descrição da imagem aqui

Depois de verificar as bibliotecas de volta no meu build, comecei a trabalhar novamente.


2
Eu teria cuidado com esta solução. Android Dependenciesfoi substituído por Android Private Librariese talvez ainda esteja lá por motivos legados. Eu acho que poderia ser removido a qualquer momento.
precisa

0

Eu também tive o mesmo problema,

i) adicione gson lib como referecend librairies
ii) verifique no java Build Path http://i.stack.imgur.com/Gldhs.png

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.