Eclipse: java.lang.NoClassDefFoundError per le classi JDK in un progetto Android

In primo luogo, voglio menzionare che ho letto molti post di stackoverflow su NoClassDefFoundError e ho anche letto in molti altri blog e siti web, ma le soluzioni che le persone hanno offerto non lo hanno risolto.

Sto eseguendo Eclipse 64-bit con la versione ADT plugin v21.0.1-543035 su Ubuntu 12.10 a 64 bit . Tutto è a 64 bit, Ubuntu, Eclipse e il JRE e JDK che utilizzo (jdk1.6.0_38).

  • chmod fallito: EPERM (funzionamento non consentito) in android?
  • IPC rapido con messaggeri o AIDL
  • TreeView come funzionalità Android
  • Imansible risolvere l'attività per: intento quando le attività di testing delle strumentazioni android
  • Selezione del text su TextView (android 2.2)
  • Dove salvare i punti GPS di Android (latitudine, longitudine)?
  • Ho scritto un'applicazione Android molto piccola che necessita di una class dal JDK da eseguire.

    Ho isolato il problema un po 'e l'ho ricreata creando un nuovo "Application Application Android" con ONLY ONE LINE OF MY CODE (nella class principale del metodo onCreate). Questa linea:

    BuffedImage buff = new BufferedImage (100.100, BufferedImage.TYPE_INT_RGB);

    Eclipse aggiunge automaticamente l'importzione necessaria:

    importzione java.awt.image.BufferedImage;

    ma chiede di aggiungere i vasi / JRE per questa class.

    Ho aggiunto jdk1.6.0_38 a Eclipse in "JRE installati" ( come istruiscono nelle pagine di aiuto di Eclipse ).

    Nel path "Java Build Path" del progetto, l'ho aggiunto tramite "Aggiungi libreria" -> "Libreria di sisthemes JRE" -> "Area di lavoro standard JRE". Ha aggiunto automaticamente il JDK al path di creazione del progetto.

    Durante il tempo di compilazione non ottengo errori. Solo quando esegue l'applicazione nell'emulatore android (qualsiasi AVD) ottengo il seguente errore:

    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) 

    Ecco le cose che ho provato che non funzionavano :

    1. aggiungendo a " eclipse.ini " la posizione del jdk ("-vm /usr/lib/jvm/jdk1.6.0_38/bin" in 2 righe distinte).
    2. Ho aggiunto i "Argomenti VM predefiniti" del path "-Djava.library.path = / usr / lib / jvm / jdk1.6.0_38 / jre / lib".
    3. Utilizzando JRE a 32 bit e JDKs e JRE / JDK7 – non funzionava (ovviamente).
    4. Ho provato ad aggiungere manualmente i file jar jdk alla cartella "libs" e contrassegnare "aggiungere a buildpath" – non funzionava.
    5. Ho disinstallato e installato nuovamente Eclipse con l'ADT e Android SDK …

    Nulla corregge questo errore fastidioso …

    Si prega di notare anche questi:

    1. Ho assicurato che il mio file .classpath contenga la voce JRE predefinita ( come si dice qui )
    2. Ho provato ad aggiungere altri file jar alla cartella "libs" + "aggiungi al path" e li utilizzavo – funzionava bene.
    3. Ho provato a eseguire lo stesso codice (la row) usando "import java.awt.image.BufferedImage;" in un progetto java normale ( non un progetto androido ) e ha reso il progetto "utilizzare il default JRE" – e ha funzionato bene! Perché funziona in un progetto Java REGOLARE e non in un progetto Android?

    Suppongo che ciò significa che l'installazione di Eclipse ha la capacità di utilizzare le classi jdk, ma non nelle applicazioni Android .

    Quindi, cosa devo fare per rendere questa singola linea di codice eseguita in un'applicazione android ?

    Qualsiasi aiuto sarebbe MOLTO molto apprezzato. Thanx in anticipo.

    One Solution collect form web for “Eclipse: java.lang.NoClassDefFoundError per le classi JDK in un progetto Android”

    Quindi, cosa devo fare per rendere questa singola linea di codice eseguita in un'applicazione android?

    La breve risposta è: niente, perché non puoi fare niente. L'integer framework java.awt.* Non fa parte dell' SDK Android, incluso BufferedImage , e quindi non è supportto dall'emulatore o dai dispositivi fisici. Android ha una propria implementazione per il caricamento e la visualizzazione di grafica.

    Senza sapere cosa serve BufferedImage , è difficile dire quale alternativa si dovrebbe considerare. Probabilmente stai cercando di fare una sorta di manipolazione delle immagini che implica l'accesso ai singoli pixel di un'image? Se questo è il caso, BitmapFactory un'occhiata alle classi Bitmap e BitmapFactory .

    Tutto si riduce a Java SDK != Android SDK . In each modo, anche fare una ricerca qui su SO; non sei il primo a fare questo errore.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.