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?


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.


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) )


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

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" />

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 :)


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.


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.


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.


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.



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.


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.


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.


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

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


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.



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


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.


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;) ...


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


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).


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.


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.


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 :)


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


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.

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.