Eclipse: java.lang.NoClassDefFoundError para classes JDK em um projeto Android
Primeiro, quero mencionar que limuitos posts de stackoverflow sobreNoClassDefFoundError, e eu também li sobre isso emmuitos outros blogs e sites, mas as soluções que as pessoas ofereciam não consertavam.
eu estou correndoEclipse de 64 bits com a versão do plugin ADT v21.0.1-543035 emUbuntu 12.10 64 bits. Tudo é 64-bit, Ubuntu, Eclipse e o JRE e JDK que eu uso (jdk1.6.0_38).
Eu escrevi um aplicativo Android muito pequeno que precisa de uma classe do JDK para ser executado.
Eu isolei o problema um pouco e o recriou criando um novo "Android Application Project" comAPENAS UMA LINHA DO MEU CÓDIGO (na classe principal no método onCreate). Está linha:
BufferedImage buff = new BufferedImage (100,100, BufferedImage.TYPE_INT_RGB);
O Eclipse inclui automaticamente a importação necessária:
import java.awt.image.BufferedImage;
mas pede que eu adicione os frascos / JRE para esta classe.
Eu adicionei o jdk1.6.0_38 ao Eclipse em "JREs Instalados" (como eles instruem nas páginas de ajuda do Eclipse).
No "Java Build Path" do projeto, adicionei-o por meio de "Add library" -> "biblioteca do sistema JRE" -> "JRE padrão do espaço de trabalho". Ele adicionou automaticamente o JDK ao caminho de construção do projeto.
Durante o tempo de compilação, não recebo erros. Apenas quando executando o aplicativo no emulador android (qualquer AVD) recebo o seguinte erro:
E/dalvikvm(828): Could not find class 'java.awt.image.BufferedImage', referenced from method com.example.usejdk.MainActivity.onCreate
W/dalvikvm(828): VFY: unable to resolve new-instance 467 (Ljava/awt/image/BufferedImage;) in Lcom/example/usejdk/MainActivity;
D/dalvikvm(828): VFY: replacing opcode 0x22 at 0x0009
D/dalvikvm(828): DexOpt: unable to opt direct call 0x0cdc at 0x0c in Lcom/example/usejdk/MainActivity;.onCreate
D/AndroidRuntime(828): Shutting down VM
W/dalvikvm(828): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
E/AndroidRuntime(828): FATAL EXCEPTION: main
E/AndroidRuntime(828): java.lang.NoClassDefFoundError: java.awt.image.BufferedImage
E/AndroidRuntime(828): at com.example.usejdk.MainActivity.onCreate(MainActivity.java:16)
E/AndroidRuntime(828): at android.app.Activity.performCreate(Activity.java:5104)
E/AndroidRuntime(828): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
E/AndroidRuntime(828): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
E/AndroidRuntime(828): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
E/AndroidRuntime(828): at android.app.ActivityThread.access$600(ActivityThread.java:141)
E/AndroidRuntime(828): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
E/AndroidRuntime(828): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(828): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(828): at android.app.ActivityThread.main(ActivityThread.java:5039)
E/AndroidRuntime(828): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(828): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime(828): at dalvik.system.NativeStart.main(Native Method)
Aqui estão as coisas que eu tenteinão funcionou:
adicionando a "eclipse.ini"a localização do jdk (" -vm /usr/lib/jvm/jdk1.6.0_38/bin "em 2 linhas separadas).Eu adicionei o "Argumentos da VM padrão" do caminho "-Djava.library.path = / usr / lib / jvm / jdk1.6.0_38 / jre / lib".O uso de JREs e JDs de 32 bits e JRE / JDK7 não funcionou (é claro).Eu tentei adicionar os arquivos jar jdkmanualmente para a pasta "libs" e marque "add to buildpath" - não funcionou.Eu desinstalei e instalei o Eclipse novamente com o ADT e o Android SDK ...Nada corrige esse erro irritante ...
Por favor, observe também estes:
Eu me certifiquei de que meu.classpath arquivo contém a entrada padrão do JRE (como eles dizem aqui)Tentei adicionarde outros jar arquivos para a pasta "libs" + "adicionar ao caminho", e usá-los - funcionou bem.Eu tentei executar o mesmo código (a linha única) usando o "import java.awt.image.BufferedImage;" em umregular projeto java (não é um projeto android) e fez o projeto "usar Default JRE" - efuncionou bem! Por que funciona em um projeto Java REGULAR e não em um projeto Android?Eu acho que isso significa que a minha instalação do Eclipsefaz tem a capacidade de usar as classes jdk, masnão em aplicativos android.
Então o que eu tenho que fazer para fazer esta linha única de código rodar?em uma aplicação android?
Qualquer ajuda seria muito apreciada. Thanx antecipadamente.