2014-10-22 11 views
5

Mi chiedo se esiste un modo per personalizzare google-play-services.jar.Come personalizzare i servizi di riproduzione di Google per ridurre le dimensioni del contenitore?

Google play services version 6.1

ho scoperto che la nuova versione ha 24K metodi che rende la mia applicazione di metodo Max numero (~ 65K) e quindi non posso creare il file APK (o DEX).

In passato ho visto su alcuni siti che è possibile configurare google-play-services.jar attivando/disabilitando le funzionalità non utilizzate .

Il mio vecchio peso del barattolo è 7K (invece 19K) e non posso saltare a 24K, troppo espansivo.

Qualche suggerimento, per favore?

[EDIT]

ho trovato this domanda dove @Eric Lafortune suggerisce di utilizzare Proguard

+0

Hai provato ad attivare ProGuard? – Squeazer

+0

@Squeazer Sì, ho pensato di utilizzare proGuard ma ricordo che sul sito ero in grado di selezionare/deselezionare i flag con le funzionalità e scaricare jar personalizzati. Oggi non riesco a trovarlo – snaggs

risposta

4

Tenendo presente che:

  • Uso Proguard è sempre consigliabile
  • MultiDex, nonostante l'aggiunta di testa in fase di esecuzione, è l'unica soluzione praticabile quando si è veramente utilizza tutti coloro metodi (che è raramente il caso!)

I Se stai utilizzando Gradle e desideri solo escludere automaticamente le parti di Play Services che non usi, questo è il modo più semplice, più rapido ed efficiente: https://gist.github.com/Takhion/10a37046b9e6d259bb31.

Basta aggiungere come suggerito e commentare il exclude sulle parti che si necessario!

Era talmente utile per il debug costruisce dove non si vuole passare attraverso Proguard ogni volta;)

+0

Come posso eseguire il tuo script, grazie? – snaggs

+0

@fessy aggiungi 'strip_play_services.gradle' nella stessa cartella dove hai l'app 'build.gradle' e all'interno di quella aggiungi 'applica da:' strip_play_services.gradle'' (lo faccio dopo i vari plugin). Se usi Proguard, aggiungi la linea nella lista al tuo' proguard- rules.txt' e sei pronto! Ora ricostruisci e divertiti :) – Takhion

+0

@Takhion è possibile escludere le classi dal progetto della libreria dei servizi di gioco di Google? perché sto usando Eclipse non Android Studio. – Amarnath

14

Idealmente si dovrebbe usare ProGurad, tuttavia è possibile seguire questi due passaggi:

Fase 1 : Rimuovi classi non utilizzate dal file jar

Aprire il google-play-services.jar nel progetto di libreria con un gestore di file zip come Winrar o 7zip. Troverai molte cartelle come maps, games, elimina solo quelle che non ti servono. Assicurati di mantenere common, dynamic, internal.

Fase 2: Rimuovere risorse inutilizzate dalla cartella res

maggior parte delle risorse nella cartella del google-play-services_lib \ res potrebbe essere di alcuna utilità in modo da poter rimuovere. Questi includono values-af, values-am, .... ciò che è necessario conservare è colore, cartella drawable, drawable-hdpi e values.

Aggiorna e crea il progetto google-play-services_lib e il tuo progetto. La tua dimensione di apk dovrebbe essere diminuita.

+0

Grazie mille amico! Questo mi ha salvato dal [metodo 65k] (https://developer.android.com/tools/building/multidex.html)! – qefzec

+0

Grazie grazie grazie! Mi stavo strappando i capelli con il problema del metodo 65k .. Questo è fantastico. – Jamie

+0

puoi farmi sapere quale cartella posso cancellare Ho solo bisogno di gcm feature Non sono sicuro quale posso cancellare ( –

0

Hai scelto come target Android 2.3 o no?

In caso contrario, utilizzare la libreria di supporto MultiDex.

Da qui: Google+.


MultiDex libreria di supporto

Quindi l'applicazione è cresciuta troppo grande: sei oltre il limite Dex. Forse hai approfittato di alcune delle librerie ridicolmente utili che potrebbero perdere peso (Google Play Services, ti sto guardando). Hai dovuto ricorrere a limitare la funzionalità della tua app o fare hack pazzi per aggirare il limite. Non più: benvenuto MultiDexApplication!

MultiDexApplication, parte di un semplice android-support-multidex.jar trovato in sdk\extras\android\support\multidex\library\libs, offre il supporto MultiDex su tutti i dispositivi API 4+ (beh, fino alla v21, dove si ottiene questo in modo nativo) facendo in modo che l'applicazione estenda MultiDexApplication o chiamino MultiDex.install (contesto) nel attachBaseContext dell'applicazione. Questo è tutto. Sul serio.

Nota: dovresti davvero, davvero Proguard prima di scendere nella tana del coniglio Multidex.

Link

4

In Android Studio È possibile utilizzare singola libreria da Google Play servizio come

compile 'com.google.android.gms:play-services:7.5.0' 

con queste righe:

compile 'com.google.android.gms:play-services-maps:7.5.0' 
compile 'com.google.android.gms:play-services-ads:7.5.0' 
compile 'com.google.android.gms:play-services-analytics:7.5.0' 
compile 'com.google.android.gms:play-services-location:7.5.0' 

lista completa è disponibile qui https://developers.google.com/android/guides/setup

Alcune API non dispongono di una libreria separata; includile includendo la libreria di base

Problemi correlati