2015-12-03 7 views
5

Ich verwende productFlavours in meiner App. Ich benutze auch multi-dex.java.lang.LinkageError: MainActivity

defaultConfig { 
     multiDexEnabled true 
     minSdkVersion 17 
     targetSdkVersion 22 
     ... 
} 

productFlavors { 
    prodFlavor1{...} 
    prodFlavor2{...} 
} 

dependencies { 
    compile 'com.android.support:multidex:1.0.1' 
... 
} 

In der Anwendungsklasse:

@Override 
    public void onCreate() { 
     MultiDex.install(getApplicationContext()); 
     super.onCreate(); 
} 

Ich habe den obigen Code für Android-Versionen unter 5-Unterstützung hinzugefügt.

Dann startet die folgende Struktur, mit 2 leicht unterschiedlichen Versionen von MainActivity (MainActivity erweitert AppCompatActivity) zu einem bestimmten Zeitpunkt in der App, auf einen Tastendruck.

app/src/prodFlavor1/.../MainActivity 
app/src/prodFlavor2/.../MainActivity 

In prodFlavor1, MainActivity beginnt unmittelbar nach SplashActivity. In prodFlavor2, MainActivity.

Dies arbeitete für eine lange Zeit vor und auch nachdem ich diesen Teil mit hinzugefügt, aber plötzlich gebückt arbeiten ohne Erklärung. Selbst wenn ich den Code entferne, der auf multidex verweist, bekomme ich das gleiche.

Wenn ich zu prodVersion2 wechseln, funktioniert alles. Aber wenn ich zu prodVersion1 schalte ich bekommen:

startActivity(new Intent(TutorialActivity.this,MainActivity.class));

Nexus 5 mit Android 6:

Process: com.mpackage, PID: 30807 
                  java.lang.LinkageError: com.mpackage.activities.MainActivity 
                   at dalvik.system.DexFile.defineClassNative(Native Method) 
                   at dalvik.system.DexFile.defineClass(DexFile.java:226) 
                   at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219) 
                   at dalvik.system.DexPathList.findClass(DexPathList.java:338) 
                   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54) 
                   at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
                   at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
                   at com.gossip.activities.TutorialActivity$1.handleMessage(TutorialActivity.java:52) 
                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                   at android.os.Looper.loop(Looper.java:148) 
                   at android.app.ActivityThread.main(ActivityThread.java:5417) 
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Auf Nexus4 Emulator mit Android 4.4:

java.lang.NoClassDefFoundError: com.mpackage.activities.MainActivity 
                   at com.gossip.activities.TutorialActivity$1.handleMessage(TutorialActivity.java:52) 
                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                   at android.os.Looper.loop(Looper.java:136) 
                   at android.app.ActivityThread.main(ActivityThread.java:5017) 
                   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:779) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                   at dalvik.system.NativeStart.main(Native Method) 

UPDATE:

Es scheint, dass der Fehler durch die Tatsache verursacht wurde, dass ich eine Methode isResumed() in MainActivity genannt hinzugefügt haben, deshalb (Native Method) Fehler, andere auf 6,0 von 4,4.

Antwort

19

schließlich nach this nützlich Thread gefunden gelöst:

ich eine Methode isResumed() in meiner Klasse erstellt haben.

Sofort nach dem Entfernen/Bearbeiten alles ging normal. Ich habe diese Methode in Activity oder AppCompatActivity in der Dokumentation nicht gefunden.

+3

Sie ist in der Dokumentation ja versteckt (siehe @hide). Aber Sie können es im Quellcode finden: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/Activity.java#L6432 – xip

0

Widersprüchlicher Name der Funktion mit einer der Basisklassen. Benennen Sie Ihre Funktion in etwas Brauchbares um, d. H. IsBaseResumed()