2015-11-13 11 views
8

Come qualsiasi sviluppatore Android dovrebbe sapere, esiste un limite di 65k per il tuo apk (perché la VM ha solo 16 bit per la gestione dei metodi). Dovrebbe essere abbastanza difficile da raggiungere da solo, ma è facile non appena inizi ad aggiungere alcune librerie.Come importare ** alcune ** parti della libreria guava nell'app per Android (gradle)

Dall'anno scorso è possibile liberarsi di ciò abilitando MultiDex su Android 5.0 e versioni successive (e aggiungendo una libreria di supporto per versioni precedenti di Android). Anche quando è possibile, è sempre meglio ridurre il numero di metodi e ottenere una api più piccola (e le prestazioni dovrebbero essere migliori, non dovrebbe?).

A certo punto i ragazzi di Android realizzato la dimensione della loro biblioteca di Google Play Services era insostenibile (20k metodi) e hanno preso la grande decisione di dividerlo in diversi moduli, in modo da poter aggiungere semplicemente le parti necessarie come (con grado):

compile ('com.google.android.gms:play-services-analytics:8.1.0') 
compile('com.google.android.gms:play-services-appindexing:8.1.0') 

sapete se è possibile fare qualcosa di simile con la libreria Guava? Sono circa 15K metodi, quindi sarà davvero utile. Vorrei usare solo una piccola parte di Guava, quindi non ho bisogno/voglio includere l'altro. Ho cercato nella documentazione e su Google, ma non ho trovato nulla.

compile group: 'com.google.guava', name: 'guava', version: '18.0' 

Alcuni ragazzo ha chiesto qualcosa di simile due anni fa, probabilmente per un progetto Java, ma non esistevano le parti più piccole guava poi. Downloading part of guava-libraries

L'unica cosa che mi viene in mente è copiare solo le classi Guava necessarie invece di caricare la libreria, ma penso che sia una soluzione orribile.

Non credi che una grossa libreria debba utilizzare un sistema di divisione dei moduli come hanno fatto con i servizi di gioco?

EDIT: Inoltre, il task multidex richiede troppo tempo (un minuto e mezzo quando prima era inferiore a 15 secondi), quindi ogni volta che voglio lanciare l'app devo aspettare. Quindi, anche quando si utilizza Proguard è un'ottima soluzione per una versione di produzione, non è adatto allo sviluppo poiché richiede più tempo rispetto al multidexing.

+5

Gli sviluppatori Guava sono a conoscenza di questo problema e [hanno fornito una soluzione Maven utilizzando ProGuard] (https://github.com/google/guava/wiki/UsingProGuardWithGuava). Non so come integrarlo con Gradle. –

+0

Sfortunatamente Guava non è ancora stato modularizzato. Quello che facciamo è che abbiamo due sapori di build: uno dev che usa il multidex; una versione con proguard. – rds

risposta

Problemi correlati