NoClassDefFoundError - Eclipse e Android

193

Estou com um problema ao tentar executar um aplicativo Android que, até adicionar uma segunda biblioteca externa ao caminho de criação, estava funcionando bem. Desde que adicionei o frasco scoreninja, agora recebo um NoClassDefFoundError quando tento executar o aplicativo.

Aqui está a mensagem:

02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter

Como todos os scripts de construção são gerados pelas ferramentas do Android (?), Não tenho certeza do que mais posso fazer além de limpar e reconstruir ou reiniciar o eclipse (eu já tentei os três). Alguém sabe como posso alterar isso?

Ao Sr
fonte
1
Como você adicionou o arquivo jar? Você adicionou usando o caminho de construção -> Bibliotecas -> Frascos externos?
Teja Kantamneni
1
Clique com o botão direito do mouse em Project> Build Path> Add External Archives ... conforme instruções aqui: scoreninja.appspot.com
Tom R
4
Se você atualizou ADT recentemente, então olhar para a resposta de John abaixo (e upvote-lo!) Stackoverflow.com/a/9916751/489852
Atul Goyal
1
Se você está tendo esse problema, antes de pular diretamente para a resposta de John, a resposta de @Till abaixo também está resolvendo muitas pessoas, inclusive eu.
Carlos P
Você tentou multidex?
Ashish Rawat

Respostas:

234

Eu tive esse problema depois de atualizar o ADT.

Eu estava armazenando todos os meus arquivos JAR em uma pasta chamada "lib" e adicionando os frascos ao caminho de construção da maneira normal do Eclipse. Isso funcionou bem até a minha atualização.

Após minha atualização, eu estava obtendo o NoClassDefFoundError para uma classe que eu podia ver claramente que estava incluída no jar (verificando as classes ReferencedLibraries).

A solução foi remover meus jars do caminho de criação e renomear minha pasta "lib" para "libs". Esta é uma convenção de formigas e parece ser a maneira como o novo ADT encontra e inclui bibliotecas em um arquivo .apk. Depois que fiz isso, tudo funcionou bem.

John O'Connor
fonte
1
Muito obrigado! Eu não tinha uma pasta lib ou libs antes da atualização do ADT de ontem, e tudo funcionou bem. Após a atualização, todos os frascos externos tiveram esse problema. Eles foram corrigidos graças à sua resposta. Preciso combinar a sua com a de Brian para que funcione.
Hong
Obrigado John! Acrescentarei que, após alterar a pasta para libs, tive que reiniciar o eclipse para que funcionasse.
22712
5
Encontrei o mesmo problema após atualizar o ADT, mas mantinha meus jars em um diretório fora do meu projeto e os incluía como uma Biblioteca do Usuário no meu caminho de compilação. A solução foi remover a biblioteca do usuário do meu caminho de construção e incluir jarros usando "Adicionar jarros externos" e depois exportá-los, marcando as caixas de seleção na guia "Ordem e exportação".
Travis
1
Eu estava fazendo referência ao android-support-v13.jar como uma biblioteca externa em C: \ android-sdk-windows \ extras \ android \ compatible \ v13. Movi esse JAR para a pasta libs do projeto e removi a referência do Java Build Path -> Libraries. Uma construção limpa e eu estava indo novamente.
Snowwire
Oi. i tentou a nossa abordagem, adicionando as libs jar externos no interior / libs e agora eu recebo este erro: A conversão para o formato Dalvik falhou com o erro 1
Jonathan
100

Não precisei colocar a biblioteca de jar em recursos ou em lib (s), mas apenas marque a caixa para este jar em Propriedades -> Caminho de Construção Java -> "Ordem e Exportação" (ela estava listada antes, mas não selecionada) )

Até
fonte
Muito obrigado! Eu estava lutando com esse erro há muito tempo e tudo o que precisava fazer era marcar a caixa danada do frasco na tela "Encomendar e exportar". O engraçado é que eu só tinha que fazer isso para que funcionasse em um emulador do Nook Tablet. Não houve problemas em dispositivos ou outros emuladores.
Luis
5
Alguém sabe por que você precisa fazer as duas coisas, adicionar a biblioteca e também marcar a caixa de seleção em Ordem e exportação? Existe uma razão pela qual eu gostaria de adicionar um JAR externo, mas não incluí-lo no Pedido e Exportar?
Lou Morda
Eu tive esse problema depois de atualizar o ADT e isso resolveu para mim.
Cdavidyoung 28/07/12
5
Isso me ajudou, mas somente depois que eu fiz o Project -> Clean
altumano
Obrigado!! Me salvou. Teve que fazer uma limpeza e reiniciar após a instalação do Eclipse Juno.
Rynardt
68

Ao adicionar o jar externo ao seu caminho de construção, ele adiciona o jar ao seu pacote, mas ele não estará disponível durante o tempo de execução.

Para que o jar esteja disponível no tempo de execução , você precisa:

  • Coloque o frasco na sua assetspasta
  • Inclua esta cópia do jar no seu caminho de construção
  • Vá para a guia de exportação na mesma janela pop-up
  • Marque a caixa contra o frasco recém-adicionado
Anthony Forloney
fonte
ScoreNinjaAdapter é o código de outra pessoa, mas eu ficaria muito surpreso se contivesse esse erro, pois é de uso comum. O erro acontece em um ponto no meu próprio código.
Tom R
O erro literalmente acontece aqui: sna = new ScoreNinjaAdapter (this, SN_APP_ID, SN_APP_KEY);
Tom R
Você precisa de uma importinstrução para arquivos jar externos? Eu nunca os usei.
Anthony Forloney
Você já tentou remover o arquivo .jar da assestspasta?
Anthony Forloney
Sim. No final, eu me cansei de tudo isso e apenas baixei a fonte e copiei os arquivos de origem no meu projeto. Não é a melhor solução, mas funciona agora. Obrigado por toda sua ajuda.
Tom R
48

Eu tinha isso para o MapActivity. As compilações no Eclipse obtêm NoClassDefFound no depurador.

Esqueci de adicionar biblioteca ao manifesto, <Application>...</Application>elemento interno

<uses-library android:name="com.google.android.maps" />
brian.clear
fonte
27

Alterei a ordem dos projetos incluídos (Eclipse / Configurar caminho de compilação / Ordem e exportação). Mudei meus dois projetos dependentes para o topo da lista "Solicitar e exportar". Resolveu o problema "NoClassDefFoundError".

Isso é estranho para mim. Não ouvi falar da importância da ordem das bibliotecas e projetos incluídos. Android + Eclipse é divertido :)

Andrew Krizhanovsky
fonte
Essa também é a solução mencionada pelo segundo comentário do usuário aqui no bugruport: code.google.com/p/android/issues/detail?id=55304
arberg
15

Não tenho certeza se isso está relacionado ou se você ainda está procurando uma resposta, mas me deparei com esse tópico enquanto tentava pesquisar o mesmo erro (mas possivelmente por razões diferentes).

Não consegui encontrar nenhuma solução on-line, mas uma resposta em um tópico semelhante me fez pensar e percebi que provavelmente só precisava reconstruir (ou limpar) o projeto.

No Eclipse, vá para Projeto => Limpar. Selecione seu projeto e o Eclipse pareceu consertá-lo. Para mim, isso resolveu o problema.

Espero que isto ajude.

Brian
fonte
Sim, parece haver um erro no Eclipse / ADT / dex / o que quer que basicamente perca as classes na compilação. Também pode perder a Applicationclasse, o que leva a um erro diferente.
Timmm
13

Eu encontrei o mesmo problema. O motivo foi que a biblioteca que eu estava tentando usar havia sido compilada com um JDK 7 padrão.

Eu recompilei com as -source 1.6 -target 1.6opções e funcionou bem.

assylias
fonte
OBRIGADO YOUUUUUUUUUUUUUUU !!!!!!!!!!!!!!!!!!! Fiquei frustrado com esse problema e você resolveu! É um pouco irônico que mesmo o Jelly Bean 4.3 SDK (API 18) ainda não consiga ler 1,7 JAR / classes. E o pior de tudo: não se queixa :(
Hendy Irawan 01/09/2013
Eu estava tendo o mesmo problema. O pior de tudo é que pensei nessa opção e alterei meu -source 1.7 com -source 1.5 (com certeza) e o problema não foi resolvido. Mas, depois de ler seu comentário, tentei novamente com o 1.6 e, em seguida, funcionou como um encanto.
Pedro Náñez 26/09
7

A mesma coisa funcionou para mim: Propriedades -> Caminho de compilação Java -> "Ordem e exportação" Curiosamente - por que isso não é feito automaticamente? Eu acho que falta alguma configuração. Também aconteceu comigo após a atualização do SDK.

vlad
fonte
3

Clique com o botão direito do mouse na pasta do projeto, procure Propriedades no caminho de construção Java e selecione os arquivos jar que você vê. Ele tem trabalhado para mim.

Zacharia
fonte
2

Tentei de tudo nesta publicação (e em algumas outras publicações) e não funcionou para mim; esta é de longe a mais terrível atualização do ADT que já experimentei e nunca atualizarei sem um backup do ADT em funcionamento.

Consegui resolvê-lo removendo o projeto e adicionando-o novamente usando um backup de origem que eu tinha.

Eli
fonte
2

Eu tive esse mesmo erro com o ADT22. Foi resolvido verificando "Bibliotecas privadas do Android" nas propriedades -> caminho de construção do Java -> Pedido e exportação. Se você estiver usando algum projeto de biblioteca, o mesmo deve ser feito para eles também.

prijupaul
fonte
Também funcionou para mim. Incluí a biblioteca, mas esqueci de verificar em "Encomendar e exportar". Obrigado!
jmrodrigg
2

Todas as respostas existentes não funcionam para mim porque meu caso é um pouco diferente. Levei algumas horas para fazê-lo funcionar. Estou usando o Eclipse.

Meu projeto android inclui outro projeto java 1.6 normal, que precisa de um arquivo jar de terceiros. O truque é:

  • inclua o jar no projeto java normal para compilação (apenas), não marque-o na guia "Order and Export"
  • copie também esse arquivo jar na pasta "libs" do projeto android para que fique disponível em tempo de execução

Espero que isso ajude aqueles que têm cenários semelhantes aos meus.

Thumb dourado
fonte
1

às vezes você precisa pegar todo o projeto externo como biblioteca e não apenas o jar:

meu problema foi resolvido adicionando o projeto inteiro (no meu caso, google-play-services_lib) como biblioteca e não apenas o jar. as etapas para isso (da resposta @style ):

  1. Arquivo-> Novo-> Outro
  2. Selecionar projeto Android
  3. Selecione "Criar projeto a partir da fonte existente"
  4. Clique no botão "Procurar ..." e navegue até o projeto desejado
  5. Concluir (agora projeto da barra de ação no seu espaço de trabalho)
  6. Clique com o botão direito do mouse em seu projeto -> Propriedades
  7. Na seção Android-> Biblioteca, clique em Adicionar
  8. selecione o projeto adicionado recentemente -> Ok
dvrm
fonte
1

Às vezes, isso acontece devido à não inclusão de jar, do qual você tem dependência, com a tag "uses-libary" no seu AndroidManifest.xml.

Além disso, verifique se ele deve estar dentro da tag "application".

Saudações,

Ravi

Ravi Pandit
fonte
1

Eu tive esse problema e foi causado por não "exportar" a biblioteca. A questão era justamente porque os arquivos .class de algumas classes não estão disponíveis durante o empacotamento do APK.

No meu caso, eu estava usando a classe "CusrsorAdapter" e, em "JavaBuildPath-> Order and Export", não verifiquei o jar V4 de suporte. Depois que ele é selecionado, o problema desaparece.

Para certificar-se de que você está recebendo o erro noClassDefFound por causa do motivo acima, verifique seu logacat, você verá um erro desconhecido de superclasses no tempo de execução.

Sojan PR
fonte
0

Tentei várias coisas e o motivo do erro no meu caso foi o conflito entre maps.jar e o Google Api no Java Build Path-> Libraries. Então, quando eu removi o maps.jar funcionou bem.

Saudações,

wahib

Wahib Ul Haq
fonte
0

verifique se o seu arquivo jar está no diretório libs do seu projeto, se você está usando a versão mais recente do ADT com seu eclipse.

samir
fonte
0

Eu tenho exatamente o mesmo problema ... Para corrigi-lo, acabei de remover minhas Libs privadas do Android em "caminho de construção" e cliquei em ok ... e quando abri o "caminho de construção" novamente, o eclipse os adicionou por si só novamente, e então funcionou para mim;) ...

pkdkk
fonte
0

Passei dois dias tentando resolver esse problema depois de atualizar o ADT. finalmente tive a sorte de obter este post aqui:

https://code.google.com/p/android/issues/detail?id=55304

o que me levou na direção certa. ao seguir a solução - lembre-se de substituir a biblioteca de suporte do Android de todos os seus projetos pela mesma versão (remova-a e reinstale-a nos projetos). Espero que isso ajude. Boa sorte

Ron
fonte
0

Se você prefere saber a quais arquivos a solução alternativa está relacionada, veja o que encontrei. Simples, altere o arquivo .classpath para

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Substitua o arquivo .classpath em todos os projetos de biblioteca e no projeto principal do Android. O arquivo .classpath está na pasta raiz do projeto eclipse. É claro que não se esqueça de adicionar suas próprias entradas de caminho de classe, caso você tenha alguma (então compare com sua versão atual do .classpath).

Eu acredito que este é o mesmo resultado que percorrer os menus do eclipse que o componavt-user explicado acima (Eclipse / Configurar caminho de compilação / Ordem e exportação).

Arberg
fonte
0

A solução aqui funcionou para mim. É uma questão de importar a biblioteca para a pasta libs, modificar o arquivo build.gradle e limpar com gradlew.

gabr10
fonte
0

Se você alterar seu pedido e exportar no caminho de criação do projeto, esse erro não ocorrerá. A outra maneira de alcançá-lo é através do .classpath na pasta do projeto.

geekgugi
fonte
0

Experimente o seguinte: -

Passo 1

Inclua todas as bibliotecas para criar pat no Eclipse (significa tornar todas as bibliotecas referenciadas)

Passo 2

Exclua o arquivo R.java e crie novamente o projeto. Não se preocupe, o R.java será recriado automaticamente.

Calafrio :)

user1606195
fonte
0

Pelo que entendi, seu projeto não mostra erros, porque você incluiu o jar. Mas o Jar não será usado quando o seu projeto for "exportado" para o dispositivo. Tente isto

Projeto -> Propriedades

Caminho de Construção Java / Ordem e Exportação

[✔] seu pote


fonte
0

Isso acontece com muita frequência para mim.

A última vez que aconteceu, me lembro, foi causada pela mudança do Eclipse ADT (edição especial do Google) para o Android Studio e pela volta. Basicamente, tentei todos os métodos que encontrei no stackoverflow que não funcionaram para mim.

Eventualmente, o aplicativo voltou a funcionar (sem mais NoCalssDeffoundError) alternando meu IDE para o Eclipse original (Kepler) com o ADT.

tyolab
fonte