2012-03-22 14 views
7

Android memorizza i suoi programmi in formato APK, che è una versione modificata di ZIP/JAR.in che modo Android memorizza ed esegue programmi

Quando questi file APK sono installati, vengono memorizzati in /system/app/$APKNAME.apk.

Alcune app in questa directory hanno anche un file $ APKNAME.obex.

Questi file APK contengono alcuni dei maggese

META-INF 
    MANIFEST.MF 
    CERT.RSA 
    CERT.SF 
SHA1-Digest 
res 
AndroidManifest.xml 
classes.dex 
resources.arsc 

Quindi quello che voglio sapere è quali sono i file .obex e sono androidi programma decompresso dal APK/CAP/JAR in fase di esecuzione e come?

+0

Sembra che un APK sia molto simile a un JAR. Vale a dire, nemmeno ZIP modificato: solo un normale ZIP, ma con file particolari in particolari posti al suo interno. – cHao

+0

Ricorda che gli obex sono più che semplici decompressi, sono anche ottimizzati e verificati. Questo fa in modo che il verificatore debba fare meno lavoro, e non devi fare altrettanta ottimizzazione in fase di esecuzione (ovviamente non devi ancora farlo). –

+0

@cHao OK, sto davvero volendo conoscere il processo dall'installazione di un APK all'avvio/esecuzione. – zeitue

risposta

2

Il modo in cui funziona è piuttosto interessante e fornisce alcune informazioni chiave sul modello di runtime di Android. La prima cosa che consiglierei di guardare è Dalvik VM internals, se pensi di fare qualsiasi quantità di roba di sistema con Android. (Anche se, ovviamente, è vecchio.) Ora, quando il gestore di pacchetti Android ottiene un intento che richiede l'avvio di una nuova app, si stacca da una nuova macchina virtuale da un processo zigote già in esecuzione. Questa è fondamentalmente una tecnica che consente al sistema di ottenere molte belle proprietà di memoria (condividendo le pagine mappate, ecc.). Quindi, il sistema carica un file (potenzialmente pre ottimizzato e verificato) da caricare in modo che il VM possa iniziare ad eseguirlo. Dovresti leggere il documento this, che ti dirà parecchio su come funziona. (Forse anche il thread this aiuterà.) Ricorda che, poiché tutti i sistemi sono diversi, ad esempio se sei su una nuova architettura, non riceverai il supporto JIT a meno che non lo scrivi esplicitamente! - Non puoi sapere con certezza come Dalvik caricherà il codice per far funzionare la tua app.