2015-02-02 7 views
16

Ciao amici a Stack OverflowNoClassDefFoundError per la libreria .jar in fase di esecuzione in studio Android

Recentemente ho incontrato un problema in sede di attuazione Fiksu SDK nella mia app Android. Una breve introduzione, Fiksu SDK è uno strumento di marketing per registrare installazioni ed eventi. Tutti i metodi relativi alla Fiksu è in un file .jar chiama "ASOTracking.jar"

Il problema:

la libreria è impostato correttamente, non v'è alcun errore riportato dal Gradle quando il progetto compila e posso anche fare apk debug. Tuttavia, al momento dell'esecuzione tenta di inizializzare l'SDK, genera "java.lang.NoClassDefFoundError" in fase di runtime.


Il registro:

01-27 14:06:54.801 31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.getClientId 
01-27 14:06:54.801 31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13738: Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;.getInstance()Lcom/fiksu/asotracking/FiksuDeviceSettingsManager; 
01-27 14:06:54.801 31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0000 
01-27 14:06:54.806 31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuConfigurationManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.initialize 
01-27 14:06:54.806 31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13733: Lcom/fiksu/asotracking/FiksuConfigurationManager;.getInstance()Lcom/fiksu/asotracking/FiksuConfigurationManager; 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x000f 
01-27 14:06:54.806 31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.isAppTrackingEnabled 
01-27 14:06:54.806 31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13738: Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;.getInstance()Lcom/fiksu/asotracking/FiksuDeviceSettingsManager; 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0000 
01-27 14:06:54.806 31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.setAppTrackingEnabled 
01-27 14:06:54.806 31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13738: Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;.getInstance()Lcom/fiksu/asotracking/FiksuDeviceSettingsManager; 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0010 
01-27 14:06:54.806 31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.setClientId 
01-27 14:06:54.806 31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13738: Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;.getInstance()Lcom/fiksu/asotracking/FiksuDeviceSettingsManager; 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0010 
01-27 14:06:54.806 31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuConfigurationManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.setDebugModeEnabled 
01-27 14:06:54.806 31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13733: Lcom/fiksu/asotracking/FiksuConfigurationManager;.getInstance()Lcom/fiksu/asotracking/FiksuConfigurationManager; 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0001 
01-27 14:06:54.806 31166-31166/com.example.myapp E/dalvikvm﹕ Could not find class 'com.fiksu.asotracking.CustomEventTracker', referenced from method com.fiksu.asotracking.FiksuTrackingManager.uploadCustomEvent 
01-27 14:06:54.806 31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve new-instance 2112 (Lcom/fiksu/asotracking/CustomEventTracker;) in Lcom/fiksu/asotracking/FiksuTrackingManager; 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x000f 
01-27 14:06:54.806 31166-31166/com.example.myapp E/dalvikvm﹕ Could not find class 'com.fiksu.asotracking.PurchaseEventTracker', referenced from method com.fiksu.asotracking.FiksuTrackingManager.uploadPurchase 
01-27 14:06:54.806 31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve new-instance 2125 (Lcom/fiksu/asotracking/PurchaseEventTracker;) in Lcom/fiksu/asotracking/FiksuTrackingManager; 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x0022 
01-27 14:06:54.806 31166-31166/com.example.myapp E/dalvikvm﹕ Could not find class 'com.fiksu.asotracking.PurchaseEventTracker', referenced from method com.fiksu.asotracking.FiksuTrackingManager.uploadPurchaseEvent 
01-27 14:06:54.806 31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve new-instance 2125 (Lcom/fiksu/asotracking/PurchaseEventTracker;) in Lcom/fiksu/asotracking/FiksuTrackingManager; 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x0014 
01-27 14:06:54.806 31166-31166/com.example.myapp E/dalvikvm﹕ Could not find class 'com.fiksu.asotracking.RegistrationEventTracker', referenced from method com.fiksu.asotracking.FiksuTrackingManager.uploadRegistration 
01-27 14:06:54.806 31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve new-instance 2126 (Lcom/fiksu/asotracking/RegistrationEventTracker;) in Lcom/fiksu/asotracking/FiksuTrackingManager; 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x001e 
01-27 14:06:54.806 31166-31166/com.example.myapp E/dalvikvm﹕ Could not find class 'com.fiksu.asotracking.RegistrationEventTracker', referenced from method com.fiksu.asotracking.FiksuTrackingManager.uploadRegistrationEvent 
01-27 14:06:54.806 31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve new-instance 2126 (Lcom/fiksu/asotracking/RegistrationEventTracker;) in Lcom/fiksu/asotracking/FiksuTrackingManager; 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x0010 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35ce at 0x2b in Lcom/fiksu/asotracking/FiksuTrackingManager;.initialize 
01-27 14:06:54.806 31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35c5 at 0x2e in Lcom/fiksu/asotracking/FiksuTrackingManager;.initialize 
01-27 14:06:54.811 31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x359b at 0x15 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadCustomEvent 
01-27 14:06:54.811 31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35cf at 0x30 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadPurchase 
01-27 14:06:54.811 31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35cf at 0x23 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadPurchaseEvent 
01-27 14:06:54.811 31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35d1 at 0x26 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadRegistration 
01-27 14:06:54.811 31166-31166/com.example.myapp I/dalvikvm﹕ DexOpt: unable to optimize static field ref 0x1507 at 0x16 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadRegistrationEvent 
01-27 14:06:54.811 31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35d1 at 0x19 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadRegistrationEvent 
01-27 14:06:54.811 31166-31166/com.example.myapp D/AndroidRuntime﹕ Shutting down VM 
01-27 14:06:54.811 31166-31166/com.example.myapp W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41ecb700) 
01-27 14:06:54.821 31166-31166/com.example.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.NoClassDefFoundError: com.fiksu.asotracking.FiksuConfigurationManager 
      at com.fiksu.asotracking.FiksuTrackingManager.initialize(FiksuTrackingManager.java:83) 
      at com.example.userinterface.MyApplication.onCreate(MyApplication.java:56) 
      at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024) 
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4684) 
      at android.app.ActivityThread.access$1400(ActivityThread.java:159) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1376) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:5419) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:525) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
      at dalvik.system.NativeStart.main(Native Method) 

mio ambiente locale:

  1. progetto è sviluppato su Android Studio
  2. Sto utilizzando Mac OS X 10. 8.5 Mountain Lion
  3. compileSdkVersion 21, buildToolsVersion "21.1.2", gradleVersion = '2.2.1', com.android.tools.build:gradle:1.0.0
  4. Questo è un progetto multi-modulo. Il modulo dell'applicazione chiama il modulo libreria "userInterface" e questo SDK si trova in questo modulo libreria.

Quello che ho provato:

  1. faccio assicurarsi che il file SDK (jar) è impostato correttamente e non c'è alcun errore di compilazione riportato da Gradle
  2. faccio sicuro che non vi è alcun errore di sintassi nei punti in cui i metodi SDK sono chiamati
  3. Ho controllato la dipendenza del modulo che chiama questo SDK per verificare che non ci siano problemi di dipendenza. Vado così lontano che ho persino tagliato l'intero albero delle dipendenze (so che non è necessario).
  4. ho provato a cancellare la directory "accumulo" di tutti i moduli e ricostruire l'intero progetto
  5. ho eseguito l'operazione "Invalidate cache/Restart" in Android Studio
  6. ho eseguito "./gradlew pulire" il comando tramite Terminal a la directory root e la directory del modulo dell'applicazione.
  7. ho consultato i seguenti link in STO senza successo:

Android Studio - Importing external Library/Jar

Android Studio: Add jar as library?

Android studio Gradle Could not find method compile()

Getting "Caused by: java.lang.VerifyError:"

Unable to find classes in Android library file

NoClassDefFoundError with libraries in Android Studio


pensieri finale:

ho bisogno di qualche aiuto serio perché ho provato tutto quello che so. Questo SDK ha funzionato bene prima di migrare questo progetto da Eclipse. Ora lancia strane eccezioni durante l'esecuzione in Android Studio.

C'è un'ultima cosa che è piuttosto sospetta --- il file classpath in Android Studio (il file *** imi), riorganizzo le voci del classpath e ancora non funziona.

Grazie ragazzi per il vostro aiuto!

risposta

22

Nuove scoperte

mio GS4 (Android 4.3) non è possibile eseguire questa applicazione, ma HTC One M8 (Android 5.0.1) può essere eseguito

Root Cause

65K metodi limite Fare riferimento a questo documento: https://developer.android.com/tools/building/multidex.html Fondamentalmente esiste un limite di riferimento per i metodi e l'unica soluzione è usare la configurazione multidex. Tuttavia ci sono applicazione per le piattaforme prima 5.0 e dopo 5,0

Soluzione

La soluzione è descritto in entrambi: https://developer.android.com/tools/building/multidex.html https://developer.android.com/reference/android/support/multidex/MultiDexApplication.html Per il mio progetto, dal momento che supporta la versione precedente di Android, vado con la soluzione "libreria di supporto multidex".

  1. impostare la versione strumento di compilazione di tutti i moduli di libreria e il modulo app per l'ultima 21.1.2
  2. Per il modulo che ha classe Application, aggiungere compilazione 'com.android.support:multidex:1.0.0' come dipendenza
  3. Fare riferimento a questo collegamento per modificare la classe dell'applicazione.https://developer.android.com/reference/android/support/multidex/MultiDexApplication.html
  4. Allo stesso script Gradle, sotto Android -> blocco defaultconfig, aggiungere "multiDexEnabled vero"
  5. Se il sistema dà l'errore "Java Heap Size", nello script Gradle del modulo applicazione, aggiungere il seguente

dexOptions { 
 
    incremental true 
 
    javaMaxHeapSize "4g" 
 
}

+1

m di fronte lo stesso problema .... con la soluzione la mia applicazione è in esecuzione su genymotion ma non sul dispositivo vero e proprio .... Qualsiasi soluzione a questo plz ?? –

+0

Salve, mi dispiace per la risposta in ritardo, puoi pubblicare il file build.gradle del modulo dell'applicazione? Questo mi aiuterà a restringere la causa. –

+3

Problema risolto .... estendendo MyApplication estendere MultiDexApplication .... Grazie a –

Problemi correlati