2009-03-22 20 views
18

Poiché sia ​​l'implementazione java (OpenJDK) che la macchina virtuale Android DalvikVM sono opensource, deve essere possibile implementare JavaVM di Sun su DalvikVM di Google. Ciò renderebbe possibile eseguire app e linguaggi basati su JVM (Clojure, Jython) out-of-the-box su Android.Esecuzione di bytecode Java su Android - Sun JVM su DalvikVM

È in corso uno sforzo per produrre un'implementazione di tale JVM Sun?

+0

eri in grado di eseguire bytecode java nel telefono Android ?? se sì, puoi elencare i passaggi ?? – inquisitive

risposta

13

OpenJDK utilizza il codice nativo in modo che sia una porta non banale ... c'è almeno una VM (JikesRVM) scritta in Java, sfortunatamente non è un'implementazione completamente funzionante di Java.

Poiché DalvikVM esegue classi convertite da file .class, dovrebbe essere possibile convertire le classi. Quindi il "solo" problema è quando le lingue generano bytecode al volo - per questo richiederebbe la fase aggiuntiva di convertire il bytecode generato nel formato DalvikVM mentre il programma è in esecuzione su DalvikVM.

Hmmm .... una sorta di JITT (Just In Time Translator) che copre i file di classe in un file DalvikVM in fase di esecuzione sul telefono. Mi chiedo quanto sarebbe lento.

+0

hm. come eseguire Vista in un emu x86, all'interno di una jvm, nel 1995? :) – George

+0

tutto vecchio è di nuovo nuovo :-) – TofuBeer

0

Non penso che il problema sia tecnico. In teoria è possibile migrare OpenJDK sull'iPhone, ad esempio, ma esistono restrizioni legali.

+0

Ecco il contratto di licenza per Android: http://developer.android.com/sdk/download.html?v=android-sdk-windows-1.1_r1.zip. Non vedo alcuna barriera legale qui. – George

+0

Inoltre, il sistema operativo Android è sotto licenza Apache e GPL: http://source.android.com/license. Quindi, non esiste alcuna restrizione legale. – George

9

porting OpenJDK per piattaforma Android è possibile. Ci sono sforzi come: Shark, Zero e caciocavallo che facilitano enormemente il processo di port (= no ASM, semplice peer AWT). Inoltre Android non è altro che un kernel Linux dietro. L'unica domanda è quando sarà fatto da qualcuno?

A proposito, sia iphone che i telefoni Android hanno un processore compatibile con Jazelle, qualcuno con capacità di hacking del processore molto potenti sarebbe molto gradito aggiungere il supporto di Jazelle a OpenJDK. Facendo così, potremmo scegliere tra: accelerazione molto leggera delle risorse (Jazelle) e JIT ;-)

Informazioni su iPhone, è la stessa cosa: una porta è possibile. Solo Apple ha inserito una sezione nella licenza dell'iPhone che vieta chiaramente l'utilizzo della VM. In base alla legge europea, per me questa sezione di licenza non è legale. Due motivi: non puoi forzare/collegare l'acquisto di due dei tuoi prodotti. Qui io tune e Iphones sono collegati. Non puoi rifiutarti di vendere qualcosa che puoi vendere. Qui non appena verrà creata una VM per iPhone, se si rifiuta di essere inserita nell'archivio iTune, verrà applicato questo punto. C'è qualcuno che vuole sfidare la legalità della licenza Apple sulla terra? Io non la penso così, le persone infelici voleranno su Android o su qualsiasi altra piattaforma.

1

tecnicamente dovrebbe essere possibile interpretare il byte-code dell'hotspot su dalvik vm o il byte-code di dalvik su hotspot, ma non sarà mai efficiente (senza menzionare il design elegante) per un lungo periodo. il costo per farlo potrebbe diventare molto alto, specialmente per quanto riguarda la manutenzione nella futura evoluzione di un ecosistema così diviso.

Penso che sin dall'inizio dalvik vm sia una questione di controllo del potere e del mercato piuttosto che uno sforzo innovativo per migliorare l'ecosistema delle macchine virtuali java.dalvik vm e hotspot vm sono due ponti autostradali sul lago sullo stesso fiume costruiti in parallelo a cinque metri l'uno dall'altro. divide e porta confusione all'ecosistema tecnologico java.

google è, a mio parere, sicuramente il leader tecnologico con contributi innovativi negli ultimi dieci anni che nano oracolo molto più conservatore, ma proprio in questo argomento hanno scosso l'ecosistema java in modo quasi distruttivo. noi (programmatori) dovremmo sforzarci di trovare un'unica soluzione uniforme a questo problema. questa è l'idea principale dietro al concetto di "macchina virtuale" comunque - non dovrebbe appartenere né a Google né a Oracle.

0

Vedere http://davy.preuveneers.be/phoneme/ per MIDP, Foundation e Profilo personale jvms per apk ARM Android. (Grazie Davy !!!)

Ho riconfezionato il jvm Foundation per l'utilizzo da riga di comando e l'ho ospitato su vkfox.com/android/bin/foundation-jvm.bin per il tuo piacere. Si potrebbe usare il compilatore di eclipse nell'app gratuita JavaIDEdroid, oi vecchi compilatori kopi o kopisusu con questo jvm, con il file jar blindato di cdc + + da un jdk J2ME per un sistema di sviluppo integrato. Usando le funzionalità di TerminalIDE - console e compilatore di sole - con gli appositi barattoli di riferimento potresti anche farti arrivare. Questo è essenzialmente equivalente a un jdk1.4 senza testa con la possibilità di grafica MIDP o awt.

0

provare l'app GNURoot (contenitore ptrace proattivo) con debian Wheezy;
apt-get update
apt-get install openjdk-7-jre
/usr/lib/jvm/java-7-openjdk-Armel/jre/bin/java ...
(tra cui percorso lungo)

Problemi correlati