2015-12-03 3 views
5

私のアプリでproductFlavoursを使用しています。 私もマルチデックスを使用しています。アプリケーションクラスのjava.lang.LinkageError:MainActivity

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

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

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

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

Iは5支持以下のAndroidバージョンの上記のコードを追加しました。

MainActivity(MainActivity extends AppCompatActivity)の2つのわずかに異なるバージョンの次の構造体は、ボタンを押すとアプリの特定の時点から開始します。 prodFlavor1

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

MainActivityはすぐSplashActivity後に開始されます。 ,MainActivity

これは、私がでその部分を追加した後であっても、長い間働いていましたが、突然、説明なしで動作していました。たとえmultidexを参照するコードを削除しても、同じことが起こります。

prodVersion2に切り替えるとすべてが動作します。私はprodVersion1に切り替えたとき、私は得る:アンドロイド6と

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

ネクサス5:アンドロイド4.4とNexus4エミュレータで

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) 

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) 

を更新:

は、エラーが、私は方法がMainActivityisResumed()と呼ばれる追加されているという事実によって引き起こされたようだ、それは4.4から6.0の異なる、なぜ(Native Method)エラーです。

答えて

19

は、最後に後this便利なスレッドを見つけ解か:

私は私のクラスにメソッドisResumed()を作成しました。

public boolean isResumed(){ 
    return isResumed; 
} 

すぐに削除/編集した後、すべて正常になりました。私はActivityまたはAppCompatActivityにこの方法が見つかりませんでした。

+3

これはドキュメントには含まれています(@hideを参照)。しかし、ソースコードで見つけることができます:https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/Activity.java#L6432 – xip

0

基本クラスの1つを持つ関数の名前が競合しています。関数の名前をカスタムに変更します。つまり、isBaseResumed()