NoClassDefFound尝试使用自定义外部窗口小部件时出现异常

时间:2014-07-13 21:42:35

标签: android android-fragments calendar android-fragmentactivity

我正在尝试在我自己的项目中实现Caldroid(https://github.com/roomorama/Caldroid)。我查看了给出的示例应用程序,它将应用程序与定义小部件的项目分开。我做了同样的事情。代码编译,但是当我尝试运行应用程序时,我在尝试调用窗口小部件时收到NoClassDefFound异常。以下是设置日历的代码

private void calendarSetup(Bundle savedInstanceState) {
    caldroidFragment = new CaldroidFragment();
    if (savedInstanceState != null) {
        caldroidFragment.restoreStatesFromKey(savedInstanceState,
                "CALDROID_SAVED_STATE");
    }
    // If activity is created from fresh
    else {
        Bundle args = new Bundle();
        Calendar cal = Calendar.getInstance();
        args.putInt(CaldroidFragment.MONTH, cal.get(Calendar.MONTH) + 1);
        args.putInt(CaldroidFragment.YEAR, cal.get(Calendar.YEAR));
        args.putBoolean(CaldroidFragment.ENABLE_SWIPE, true);
        args.putBoolean(CaldroidFragment.SIX_WEEKS_IN_CALENDAR, true);

        caldroidFragment.setArguments(args);
    }

    // Attach to the activity
    FragmentTransaction t = getActivity().getSupportFragmentManager()
            .beginTransaction();
    t.replace(R.id.calendar, caldroidFragment);
    t.commit();

}

这是logcat

07-13 17:24:30.254: E/AndroidRuntime(2563): FATAL EXCEPTION: main
07-13 17:24:30.254: E/AndroidRuntime(2563): Process: com.example.app, PID: 2563
07-13 17:24:30.254: E/AndroidRuntime(2563): java.lang.NoClassDefFoundError: com.roomorama.caldroid.CaldroidFragment
07-13 17:24:30.254: E/AndroidRuntime(2563):     at com.example.app.fragments.MyActivity.calendarSetup(app.java:123)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at com.example.app.fragments.MyActivity.onCreateView(app.java:68)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:570)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.app.Activity.performStart(Activity.java:5241)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.os.Looper.loop(Looper.java:136)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at android.app.ActivityThread.main(ActivityThread.java:5017)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at java.lang.reflect.Method.invokeNative(Native Method)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at java.lang.reflect.Method.invoke(Method.java:515)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
07-13 17:24:30.254: E/AndroidRuntime(2563):     at dalvik.system.NativeStart.main(Native Method)

发生错误的行是我尝试实例化CaldroidFragment时。

我已将外部项目添加到当前项目的构建路径中,如其他SO答案中所述。然而,这似乎不起作用。

感谢。

1 个答案:

答案 0 :(得分:2)

  

我已将外部项目添加到当前项目的构建路径中,如其他SO答案中所述。

这些答案都不对。如果您在Eclipse中手动操作构建路径,那么您可能做错了。

对于作为JAR的第三方库,将其复制到libs/,您就完成了。请勿手动更改构建路径。

对于作为Android库项目的第三方库 - 如Caldroid所示 - 您需要将库导入Eclipse工作区,然后通过Project>将库附加到您的应用项目中。属性> Android系统。这在the documentation中有更详细的介绍。请勿手动更改构建路径。