CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: atl4ntis con ben 22 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: th3D0ct0r con ben 103 Thanks ricevuti negli ultimi sette giorni
Utente del mese: AI0LIA con ben 495 Thanks ricevuti nell'ultimo mese

Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
Discussione:

Bytecode dalvik e architetture

  1. #1
    mm7
    mm7 non è in linea
    Senior Droid

    Registrato dal
    Oct 2012
    Messaggi
    819
    Smartphone
    Samsung Galaxy Ace
    Thanks
    46
    Thanked 257 Times in 175 Posts
    Predefinito

    Bytecode dalvik e architetture

    Ehi bella gente

    Quando per esempio nella app google now (http://forum.xda-developers.com/show....php?t=1747224) o flash player si fa la distinzione tra armv6 e armv7 perchè la si fa ? Cioè mi spiego, le app dovrebbero essere "compilate" nel cosidetto bytecode che poi viene eseguito dalla dalvik (che se non sbaglio è il file .dex all'interno dell' .apk ), ma non è un compilato codice macchina (quello prodotto da linguaggi come C per capirci, che deve essere compilato per un architettura) quindi non dovrebbe essere influenzato dalle architetture !!
    Di conseguenza anche mettendo un app di un armv7 (io ho l'ace che ha una cpu armv6) dovrebbe girare ma non è cosi... perchè ??????

    Qualcuno può chiarirmi le idee ?


    std::string* name = new std::string("Mm7"); C++
    char *name = "Mm7" C
    name = "Mm7" Python
    public String name = "Mm7" Java
    section .data
    name db 'Mm7', 0x00 Assembly x86

  2.  
  3. #2
    Androidiano L'avatar di IlSocio

    Registrato dal
    Jul 2012
    Località
    Torino
    Messaggi
    62
    Thanks
    6
    Thanked 19 Times in 15 Posts
    Predefinito

    Probabilmente perchè per alcune parti di codice è stato utilizzato il c++
    Infatti, mentre il codice java viene compilato in bytecode, il codice c++ viene compilato in assembly... o addirittura, è anche possibile includere direttamente codice assembly.

  4. Il seguente Utente ha ringraziato IlSocio per il post:

    mm7 (30-01-13)

  5. #3
    mm7
    mm7 non è in linea
    Senior Droid

    Registrato dal
    Oct 2012
    Messaggi
    819
    Smartphone
    Samsung Galaxy Ace
    Thanks
    46
    Thanked 257 Times in 175 Posts
    Predefinito

    Quote Originariamente inviato da IlSocio Visualizza il messaggio
    Probabilmente perchè per alcune parti di codice è stato utilizzato il c++
    Infatti, mentre il codice java viene compilato in bytecode, il codice c++ viene compilato in assembly... o addirittura, è anche possibile includere direttamente codice assembly.
    Ok grazie mille, però questo vale anche per le app ordinarie o solo per alcune app (come quelle che ho citato sopra) ?


    std::string* name = new std::string("Mm7"); C++
    char *name = "Mm7" C
    name = "Mm7" Python
    public String name = "Mm7" Java
    section .data
    name db 'Mm7', 0x00 Assembly x86

  6. #4
    Androidiano L'avatar di IlSocio

    Registrato dal
    Jul 2012
    Località
    Torino
    Messaggi
    62
    Thanks
    6
    Thanked 19 Times in 15 Posts
    Predefinito

    Vale per tutto... non c'è distinzione.
    Se è stato utilizzato il c++ o l'assembly, allora l'app contiene codice che è già stato compilato per una determinata architettura.
    (e nota che, generalmente, compilando per armv5, l'app potrà girare anche su armv7... non vale il reciproco)
    Ultima modifica di IlSocio; 30-01-13 a 18:05

  7. Il seguente Utente ha ringraziato IlSocio per il post:

    mm7 (02-02-13)

  8. #5
    mm7
    mm7 non è in linea
    Senior Droid

    Registrato dal
    Oct 2012
    Messaggi
    819
    Smartphone
    Samsung Galaxy Ace
    Thanks
    46
    Thanked 257 Times in 175 Posts
    Predefinito

    Ok il discorso dell'assembly lo conosco volevo pero sapere nell'apk dove c'è il pezzo di script assembly e dove quello bytecode.. perchè dentro l'apk c'è solo il classes.dex (che è il bytecode !!)


    std::string* name = new std::string("Mm7"); C++
    char *name = "Mm7" C
    name = "Mm7" Python
    public String name = "Mm7" Java
    section .data
    name db 'Mm7', 0x00 Assembly x86

  9. #6
    Androidiano L'avatar di IlSocio

    Registrato dal
    Jul 2012
    Località
    Torino
    Messaggi
    62
    Thanks
    6
    Thanked 19 Times in 15 Posts
    Predefinito

    Se è quello l'unico file che contiene, sarà embedded dentro al classes.dex ovvero, ad un certo punto, nel .dex ci sarà un blob contenente il codice binario, ed il compilatore jit, prenderà semplicemente quel codice binario e lo integrerà, cosi' com'è, con il resto del codice che ha appena compilato.

    Come puoi notare dall'uso del condizionale, la mia è una supposizione... ed è l'unica plausibile che mi viene in mente al momento.
    Ultima modifica di IlSocio; 31-01-13 a 14:14

  10. Il seguente Utente ha ringraziato IlSocio per il post:

    mm7 (02-02-13)

  11. #7
    mm7
    mm7 non è in linea
    Senior Droid

    Registrato dal
    Oct 2012
    Messaggi
    819
    Smartphone
    Samsung Galaxy Ace
    Thanks
    46
    Thanked 257 Times in 175 Posts
    Predefinito

    Ok, ma quando decompilo il .dex in smali (quindi mi decompila il bytecode e l'assebly in codice leggibile [Ma sempre con funzioni macchina o dalvik]), poi dopo durante la ricompilazione non dovrebbe chiedermi il target dei pezzi di codice c++ (oppure lo deduce da solo vedendo cha ha solo funzioni per una architettura?) ?


    std::string* name = new std::string("Mm7"); C++
    char *name = "Mm7" C
    name = "Mm7" Python
    public String name = "Mm7" Java
    section .data
    name db 'Mm7', 0x00 Assembly x86

  12. #8
    Androidiano L'avatar di IlSocio

    Registrato dal
    Jul 2012
    Località
    Torino
    Messaggi
    62
    Thanks
    6
    Thanked 19 Times in 15 Posts
    Predefinito

    non ho mai decompilato nulla su android... ma considera che il codice c++ non esiste piu', quindi, quei pezzi di codice c++ in realtà sono pezzi di codice assembly... in smali non ho idea di come ti si presenti, ma in ogni caso, essendo codice assembly, non necessita di essere compilato... viene preso cosi' com'è.

    Soprattutto, proprio in questi giorni, ho letto altrove che il codice c++ viene compilato e messo in \libs\ quindi non si trova dentro il file .dex pertanto, la mia supposizione iniziale, (che il .dex possa contenere codice assembly) non so se è corretta... perchè forse il dex non contiene mai codice assembly.

  13. Il seguente Utente ha ringraziato IlSocio per il post:

    mm7 (02-02-13)

  14. #9
    mm7
    mm7 non è in linea
    Senior Droid

    Registrato dal
    Oct 2012
    Messaggi
    819
    Smartphone
    Samsung Galaxy Ace
    Thanks
    46
    Thanked 257 Times in 175 Posts
    Predefinito

    Allora ho sbagliato io a dire.. tutti lo chiamano decompilare-compilare da smali ("decompilato") a .dex ("compilato") invece (come dici tu anche) si tratta tradurre le routine assembly in un qualcosa che l'umano può leggere cioè non piu in zeri-uni ma con cose leggibili ... insomma hai capito XD In libs non dovrebbero esserci le librerie ?


    std::string* name = new std::string("Mm7"); C++
    char *name = "Mm7" C
    name = "Mm7" Python
    public String name = "Mm7" Java
    section .data
    name db 'Mm7', 0x00 Assembly x86

  15. #10
    Androidiano L'avatar di IlSocio

    Registrato dal
    Jul 2012
    Località
    Torino
    Messaggi
    62
    Thanks
    6
    Thanked 19 Times in 15 Posts
    Predefinito

    si in \libs\ si sono le librerie, e da quanto ho letto, il codice c++ compilato da come risultato una shared-library che viene piazzata dentro \libs\ e verrà poi caricata da java a runtime, tramite la chiamata alla loadlibrary()

  16. Il seguente Utente ha ringraziato IlSocio per il post:

    mm7 (02-02-13)

Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •