Errore su alcuni dispositivi – imansible trovare la class “com.google.android.gms.measurement.internal.zzz”

Sto lavorando su un Android Launcher personalizzato. L’applicazione funziona perfettamente su alcuni telefoni ma non si avvia su altri. All’avvio dell’applicazione si verifica il seguente errore.

E/dalvikvm﹕ Could not find class 'com.google.android.gms.measurement.internal.zzz', referenced from method com.google.android.gms.measurement.internal.zzv.zzaL E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.VerifyError: com/google/android/gms/measurement/internal/zzv at com.google.android.gms.measurement.AppMeasurementContentProvider.onCreate(Unknown Source) at android.content.ContentProvider.attachInfo(ContentProvider.java:1651) at android.content.ContentProvider.attachInfo(ContentProvider.java:1622) at android.app.ActivityThread.installProvider(ActivityThread.java:5016) at android.app.ActivityThread.installContentProviders(ActivityThread.java:4590) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4530) at android.app.ActivityThread.access$1500(ActivityThread.java:155) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1385) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:5300) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646) at dalvik.system.NativeStart.main(Native Method) 

Quindi, dopo molte ricerche, sono venuto a sapere che questo problema era dovuto al multidexing. Su alcuni telefoni il multidexing non funziona. Potrebbe essere dovuto alla loro versione Android. Tuttavia ho risolto questo introducendo una class di applicazione

 public class MyApplication extends Application { protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } } 

e nel manifesto ho inserito il nome nel tag dell’applicazione come:

  

+) Creazione di app con metodo Over 65K causerà questo errore.

+) Quando l’applicazione e le librerie a cui fa riferimento raggiungono una certa dimensione (il file DEX della tua applicazione può avere un numero totale di metodi fino a 65.536 inclusi i metodi di framework Android, metodi di libreria e metodi nel tuo codice), si incontrano errori di compilazione che indicano la tua app ha raggiunto il limite dell’architettura di build dell’app Android.

+) Per risolverlo, includi la configurazione Multidex nel tuo build.gradle come quella evidenziata nell’immagine, insieme a questo sostituisci il metodo attachBaseContext (Context base) nella tua class Application con il contenuto sottostante.

 public class YourParentApplication extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } } 

Aggiungi questo in Androidmanifest.xml:

  

Per ulteriori informazioni su Multidex, consultare questi siti: http://developer.android.com/tools/building/multidex.html

Come abilitare il multidexing con la nuova libreria di supporto Android Multidex

inserisci la descrizione dell'immagine qui

È dovuto al multidexing, l’applicazione utilizza più di 64k metodi per aggiornare il tuo

build.gradle (livello app) con

defaultconfig {

…..

multiDexEnabled true

}

dipendenze {

…..

compila “com.android.support:multidex:1.0.1”

}

e

@Oltrepassare

 protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } 

nella tua class di applicazione