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.
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