L'opzione 1 o 3 sembra essere la soluzione migliore per questa situazione.
L'opzione 2 Download by JSON and place in java array
non è raccomandata poiché non è affidabile.
Il sistema operativo potrebbe interrompere il processo dell'applicazione quando è in background, quindi distrugge le immagini memorizzate nella cache.
Ciò richiederebbe agli utenti di scaricare nuovamente di nuovo le 100 MB di immagini la prossima volta che aprono la tua app (non è una buona idea per i dispositivi mobili).
L'opzione 1% diPlace it in @drawable
potrebbe portare a un download di app iniziale più grande, ma almeno garantisce che le immagini siano presenti e non richiederà mai un nuovo download. Inoltre, dal momento che non stai scaricando nulla in background, i tuoi utenti sapranno quanto spazio occuperà l'applicazione sul loro dispositivo fin dall'inizio.
Opzione 3 Download by JSON, place it on phone memory/SD card and read in application from memory.
consente il download di un'app più piccola. E la memorizzazione nella cache delle immagini sulla scheda SD invece della memoria aggirerebbe i problemi che l'opzione 2 ha. Librerie come android-query hanno questo tipo di funzionalità disponibili con solo 1 o 2 righe di codice. (Vedi Caricamento immagine documenti)
Se la tua app non funziona correttamente senza le immagini (arresti anomali, bug, anomalie ecc.), le immagini non verranno aggiornate in futuro e non ti preoccuperai dei pacchetti di app di grandi dimensioni, vai con l'opzione 1.
Altrimenti, vai con l'opzione 3.