簡體   English   中英

java.lang.NoClassDefFoundError:安卓

[英]java.lang.NoClassDefFoundError: android

我正在開發一個應支持多個Android SDK版本的應用程序。 它使用ActionBarSherlock庫和滑動菜單。 在android 4.0+上,該應用程序運行良好。 但是,當我嘗試在所有SDK版本較低的設備上運行該應用程序時,該應用程序會崩潰,並顯示奇怪的錯誤。 這是堆棧跟蹤:

08-08 11:54:11.626: ERROR/dalvikvm(4782): Could not find class 'ru.arsenalmedia.AvatatorActivity', referenced from method ru.arsenalmedia.Auth.complete
08-08 11:54:11.646: ERROR/dalvikvm(4782): Could not find class 'ru.arsenalmedia.AvatatorActivity', referenced from method ru.arsenalmedia.Auth.onActivityResult
08-08 11:54:11.696: ERROR/ResourceType(4782): Style contains key with bad entry: 0x010102ce
08-08 11:54:12.346: ERROR/dalvikvm(4782): Could not find class 'android.os.StrictMode$ThreadPolicy$Builder', referenced from method ru.arsenalmedia.proto.Utils.enableStrictMode
08-08 11:54:18.346: ERROR/AndroidRuntime(4782): FATAL EXCEPTION: main
        java.lang.NoClassDefFoundError: ru.arsenalmedia.AvatatorActivity
        at ru.arsenalmedia.Auth.complete(Auth.java:119)
        at ru.arsenalmedia.proto.ServiceWorker$ClientRequest$2.handleMessage(ServiceWorker.java:951)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:143)
        at android.app.ActivityThread.main(ActivityThread.java:4914)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:521)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
        at dalvik.system.NativeStart.main(Native Method)

表現:

   <uses-sdk
          android:minSdkVersion="8"
          android:maxSdkVersion="17"
            />
<application android:icon="@drawable/icon"
             android:label="@string/app_name"
             android:name="ru.arsenalmedia.Avatator"
             android:theme="@style/actionBarStyle"
        >
    <activity
            android:screenOrientation="portrait"
            android:name="ru.arsenalmedia.Auth"
            android:label="@string/app_name"
            android:clearTaskOnLaunch="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
            android:label="@string/app_name"
            android:name="ru.arsenalmedia.AvatatorActivity"
            android:screenOrientation="portrait"
            >
    </activity>
    <activity android:name="ru.arsenalmedia.SlidingPanelActivity" />
    <activity android:name="ru.arsenalmedia.TestAct"/>

</application>

我以為是因為菜單滑動。 我嘗試使用本機SlidingPaneLayout,但問題是相同的。 我讀了很多關於這個的書,沒有什么真正的幫助。 請幫忙 !!!

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.Toast;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
import ru.arsenalmedia.avatator.R;
import ru.arsenalmedia.proto.ContactInfo;
import ru.arsenalmedia.proto.GroupInfo;
import ru.arsenalmedia.proto.ServiceWorker;

public class AvatatorActivity extends SlidingFragmentActivity implements SearchView.OnQueryTextListener, MenuItem.OnActionExpandListener {

    private static final String TAG = "AvatatorActivity";
    protected Fragment mFragment;
    private SearchView searchView;

    private Menu menu;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setTitle(R.string.app_name);
        actionBarInit();

        // set the Above View
        if (savedInstanceState != null)
            mFragment = getSupportFragmentManager().getFragment(savedInstanceState, "mFragment");
        if (mFragment == null)
            mFragment = new GroupsList();
        //searchView = (EditText) findViewById(R.layout.contact_search_edittext);

        setContentView(R.layout.content_frame);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.content_frame, mFragment)
                .commit();

        // set the Behind View
        setBehindContentView(R.layout.menu_frame);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.menu_frame, new AppMenuFragment())
                .commit();

        customizeSlidingMenu();
        //updateMenuTitles();
        invalidateOptionsMenu();
    }

    private void actionBarInit() {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        setSlidingActionBarEnabled(false);
    }

    private void customizeSlidingMenu() {
        SlidingMenu sm = getSlidingMenu();
        sm.setShadowWidthRes(R.dimen.shadow_width);
        sm.setShadowDrawable(R.drawable.shadow);
        sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        sm.setFadeDegree(0.35f);
        sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        sm.setBackgroundResource(R.drawable.sliding_menu_selector);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        getSupportFragmentManager().putFragment(outState, "mFragment", mFragment);
    }

    public void switchContent(Fragment fragment) {
        Log.d(TAG, "SWITCH CONTENT");
        mFragment = fragment;
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.content_frame, fragment)
                .commit();
        //updateMenuTitles();
        invalidateOptionsMenu();
        getSlidingMenu().showContent();
    }

您是否正在使用eclipse adt插件? 如果是這樣,只需右鍵單擊project-> properties-> Java Build apth-> Order and export,然后檢查Android Dependencies。 在此處輸入圖片說明

編輯:當您使用Intellij時,是否檢查了是否已將SlidingMenu庫作為模塊導入? 在此處輸入圖片說明

PS。 ,我使用的是Android Studio&Maven,如果您不使用maven,則可以將項目導入為庫。

StrictMode是在API級別9(版本2.3)中引入的,因此您要測試的較舊版本必須無法調用...

08-08 11:54:12.346: ERROR/dalvikvm(4782): Could not find class 'android.os.StrictMode$ThreadPolicy$Builder', referenced from method ru.arsenalmedia.proto.Utils.enableStrictMode

調用Utils.enableStrictMode()方法時,應首先檢查用戶設備是否正在運行可以訪問StrictMode的版本。

編輯:這樣的事情也可能引起問題; 使用以下行,使用styles.xml中舊平台中不存在的xml屬性:

08-08 11:54:11.696: ERROR/ResourceType(4782): Style contains key with bad entry: 0x010102ce

它仍然不能解釋您的NoClassDefFoundError

這是一個難以捉摸的問題。 您提到它可以在Android 4.0+上運行,並且發出警報,提示您可能正在使用舊版Android不支持的功能。

但在此之前,如果使用的是Eclipse,則應刷新項目並進行干凈的構建。 有時Eclipse在拾取AndroidManifest更改時遇到問題,並且您可能正在模擬器/設備上加載舊版本。

如果仍然失敗,則可能是您正在導入舊API中不支持的內容,或者AvatatorActivity類擴展了僅在較新API中可用的內容。 您可以為您的AvatatorActivity發布一些代碼(即,導入內容和AvatatorActivity擴展的內容)嗎?

了解您為android:minSdkVersion和android:targetSdkVersion設置的內容也將有所幫助。

========編輯========

感謝您發布代碼。 SlidingFragmentActivity非常可疑,並且很可能缺少該庫。 調試此問題的最簡單方法是保存當前AvatatorActivity.java的副本,然后將其替換為以下內容,以查看是否可以啟動該活動。

public class AvatatorActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle(R.string.app_name);
    }
}

如果啟動此准系統活動,則說明SlidingMenu設置存在問題。

謝謝大家,我找到了解決方案。 這是SearchView的問題。 您應該使用ActionBarSherlock或SupportLibrary中的一個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM