2011-12-02 3 views
25

Lavorando con entrambi i servizi di distribuzione delle app (mercato Android e Apple App Store) ho scoperto un mistero.Differenze nelle dimensioni del file App in Android e iOS

La dimensione del file di un'app è generalmente più ampia per un'app Apple che per un'app Android. Non riesco a trovare alcuna spiegazione per le differenze, e sembra essere un argomento intatto.

Ho provato l'assegnazione di diverse app e la differenza sembra variare tra un paio di MB e 6-8 MB. Quindi la domanda è: come mai la dimensione del file è più grande per le app di Apple? A cosa serve la MB in più?

Esempi:

BBC:

Android: 918K - https://market.android.com/details?id=bbc.mobile.news.ww

di Apple: 6.7 MB - http://itunes.apple.com/dk/app/bbc-news/id364147881?mt=8

A causa di qualche prevenzione dello spam, sono in grado di collegarsi direttamente per il resto.

British Airways

Android: 1.2 MB

di Apple: 7.9 MB

Northern Bank

Android: 2.1 MB

di Apple: 6.4 MB

Bank of America

Android: 727K

di Apple: 2,1 MB

Potrei andare avanti ... Se qualcuno può fornire una statistica di dimensione del file per le due distribuzioni app, confermando o confutare la mia teoria. - Lo apprezzerei molto.

+0

Ricerca della domanda Ho scoperto che anche le immagini di base (pulsanti, pannelli, ecc.) In tutte le risoluzioni supportate sono state inserite nelle app Apple che ho avuto l'opportunità di esaminare. Se questa è una procedura normale per lo sviluppo di app Apple, allora è possibile che conti alcuni MB extra. È normale per le app di Apple? – l0w

+0

Ora è 2017 e wow Ho delle brutte notizie per voi ... –

risposta

17

Ho appena trascorso l'ultimo giorno o giù di lì cercando di rintracciare questo esatto problema. Ho creato un piccolo gioco chiamato BlockIT per Android, e ora ho una versione in esecuzione per iOS. La cosa estremamente strana è che la versione di Android è di 8,2 MB e la versione di iOS è 14,1 MB.

Ora, dato che sono il proprietario della sorgente, volevo rintracciarlo e scoprire perché. Come molti suggeriscono qui che sono gli elementi grafici - questo non è il caso. L'intero set di dati (non codice) era quasi identico in ogni pacchetto. Che ha senso dal momento che sto usando la stessa grafica in ogni applicazione.

Quindi, perché il codice è stato creato in modo molto diverso! La build del mio codice iOS era di quasi 7 MB e quella di Android era inferiore a 3 MB. Il codice stesso è stato scritto per funzionare in modo identico e tutte le porzioni di codice, tranne piccole, sono esattamente le stesse su ogni piattaforma. Quello che ho scoperto è che le impostazioni di build (iOS gcc) hanno avuto enormi effetti sulle dimensioni dell'output. Se si imposta solo su target ARM6 o ARM7, la dimensione del mio codice binario è scesa da 7 MB a 5 MB. Questo indica che ci sono duplicati quasi completi di funzioni e librerie per ogni obiettivo in un binario! Inoltre, i simboli di debug integrati non sembrano essere completamente spogliati. Infine, la crittografia del codice costa anche grandi quantità. Questo è probabilmente il più sconcertante, dal momento che Android firma i loro apk in modo simile. Sembra che la firma di iOS sia fatta in modo molto strano.

Quindi, spero che aiuti. Per reiterare:
- Immagini/dati non sembrano essere il problema
- La creazione di codice su iOS genera più uscite di piattaforma in un binario == un sacco di codice aggiuntivo (btw non mi capisco perché Apple lo fa - sembra strano).
- La crittografia del codice non è molto adatta alle dimensioni di iOS.

Non esiste un modo reale per risolvere il problema reale (di nuovo, strano e deludente).

+1

per darti dei chiarimenti sul perché produce più output per diverse versioni ARM: è perché diverse generazioni di processori supportano funzioni aggiuntive direttamente dal processore per accelerare l'esecuzione del codice. Ma dal momento che questi possono essere eseguiti solo sull'architettura corretta, è necessario anche il codice per quando il dispositivo non supporta determinate istruzioni. Quindi perché Apple lo fa? per migliorare le prestazioni su dispositivi capaci in cambio di alcune differenze di dimensioni del file piuttosto irrilevanti. – Infinite

+1

Sì, ho capito di incontrare diverse piattaforme di destinazione, ma è strano perché piuttosto che risolverlo in un'API o in un'architettura ragionevole, includono due copie complete delle librerie (il motivo per cui sono approssimativamente 2x). Quindi. Dispari. :) – user1363990

-1

A mio parere, gli sviluppatori Apple utilizzano più immagini a schermo intero (in bassa definizione e Retina) e molte più immagini rispetto ad Android e file di definizioni dell'interfaccia utente per iPhone (.XIB) sono molto più grandi dei file XML utilizzati in Android. Ci dovrebbe anche essere una differenza di compressione nella confezione (.APK) è così enormemente compressa!E, infine, forse una differenza di quadri tra cui, ma su questo punto non ho alcun indizio :)

+0

Può essere che le app iOS siano più collegate staticamente alle librerie mentre Android le librerie non sono incluse nel pacchetto? – Roalt

+0

Hai detto che il file .apk è stato compresso, il che implica che Apple non lo fa? – l0w

+0

Suppongo di sì, non penso che Apple lascerebbe l'app non compressa nel loro negozio, soprattutto dopo miliardi di download. Per le biblioteche, non ne ho idea; ma sembra ancora strano il motivo per cui Apple include le librerie nei loro pacchetti –

1

Per un'applicazione universale iPhone abbiamo bisogno di mettere a tre dimensioni delle immagini -

uno per 320x480 px
secondo per 640x940 px (retina)
terzo per 768x1024 (iPad)

dove, come durante lo sviluppo di un'applicazione Android abbiamo bisogno di mettere tre tipi di immagini -

hdpi (alto)
mdpi (medio)
ldpi (basso)

un'altra cosa qui in Android non esiste una regola obbligatoria per mettere tutti e tre i tipi di immagini. Fondamentalmente dipende da quale target stai facendo app, solo per quella risoluzione abbiamo bisogno di mettere le immagini.

5

Il file eseguibile binario in un'app per iOS è crittografato e quindi compresso molto male o per niente. L'eseguibile binario in un'app per iOS è compilato con un codice di libreria collegato in modo statico, che spesso può renderlo più grande del codice byte interpretato da Dalvik per cose simili. Le app per iPhone tendono a contenere contenuti grafici e grafica di alta qualità per risoluzioni multiple dello schermo, incluso il display relativamente grande per iPad.

+0

Ciò rende sens. Android supporta risoluzioni diverse, utilizzando una speciale struttura di cartelle. Ciò rende Android in grado di selezionare automaticamente la grafica ottimale per le diverse risoluzioni. - Non è una soluzione ampiamente utilizzata? – l0w