2016-06-12 103 views
2

注意:這不是一個罐子中缺少的類,所以不要急於將其標記爲重複。
我正在從eclipse移植一個大項目到Android Studio。我終於成功地在屏幕上看到了我的SplashActivity,但是我無法獲得在SplashActivity之後啓動的MainActivity。我收到以下錯誤運行時:使用Android Studio的活動NoClassDefFoundError

<activity 
    android:name="com.androidcore.android.main.MainActivity" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Holo.Light" 
    android:windowSoftInputMode="stateHidden|adjustPan" 
    android:launchMode="singleTop"> 
    <intent-filter> 
     <action android:name="com.totalboox.MESSAGE"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
    </intent-filter> 
</activity> 

在MainActivity代碼:587

// Pushwoosh LIB整合(見https://www.pushwoosh.com/programming-push-notification/android/native-android-sdk-integration/

> 06-13 14:42:30.176 12389-12389/com.totalboox E/AndroidRuntime: FATAL 
> EXCEPTION: main Process: com.totalboox, PID: 12389 
> java.lang.NoClassDefFoundError: com.androidcore.android.main.MainActivity$4 
> at com.androidcore.android.main.MainActivity.<init>(MainActivity.java:587) 
> at java.lang.Class.newInstance(Native Method) 
> at android.app.Instrumentation.newActivity(Instrumentation.java:1067) 
> at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317) 
> at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
> at android.app.ActivityThread.-wrap11(ActivityThread.java) 
> at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
> 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) 

MainActivity在清單中聲明

BroadcastReceiver mBroadcastReceiver = new RegisterBroadcastReceiver() 
{ 
    @Override 
    public void onRegisterActionReceive(Context context, Intent intent) 
    { 
     checkMessage(intent); 
    } 
}; 

其中RegisterBroadcastReceiver來自外部庫(pushwoosh)處理通知。

在SplashActivity的代碼開始MainActivity:

Intent mainActivity = new Intent(this, MainActivity.class); 
mainActivity.putExtra("deep_link_book_id", deepLinkBookId); 
startActivity(mainActivity); 
finish(); 

這個谷歌搜索,我發現有這個問題有一個罐子的人。在我的情況下,MainActivity.java是我的源模塊之一,它的包名是 package com.androidcore.android.main;,正如在清單中聲明的​​一樣。 該項目由4個子項目組成。 SplashActivity & MainActivity位於同一個子項目中。

我已經花了無數小時。我嘗試過:清理,重建,無效緩存和重新啓動 - 沒有任何幫助。 任何人都可以建議如何制止這個噩夢?提前謝謝了 !

+1

張貼有關MainActivity代碼:587 –

+1

'MainActivity $ 4'通常意味着一個內部類,可能是匿名的,你的活動 –

+3

的actionandroid - > action android,categoryandroid - > category Android –

回答

0

可以在使用此爲您的意圖過濾器:

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

,如果你的軟件包名稱是:(可能是com.androidcore.android - 請?)

com.androidcore.android.main 

然後使用名稱:(如果包命名com.androidcore.android然後用.main.MainActivity

android:name=".MainActivity" 

其實最好的名字包是您的域名反向:

com.yourdomain.yourprojectname 

記住這記憶是酷)

+0

意圖過濾器操作由應用程序在內部發送,因此它不是android.intent.action.MAIN MainActivity的類別不是LAUNCHER(啓動器是SplashActivity) 包名是正確的。它不以'com.yourdomain'開頭。重構到這個名字是行不通的。我懷疑這是eclipse-to-AndroidStudio移植工具的副作用。 – Senti

相關問題