java.lang.NoClassDefFoundError的:Android的兼容性问题2.2 [英] java.lang.NoClassDefFoundError: Android Compatability Issue in 2.2

查看:1016
本文介绍了java.lang.NoClassDefFoundError的:Android的兼容性问题2.2的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为了使我的应用程序兼容下降到2.2 API,我加了Android的兼容性库 appcompat_v7 &安培;根据变化需要的东西。

应用程序是在2.2版本的新版本,但崩溃运行正常。

您可以看到我的 logcat的输出

  14 07-16:49:59.551:D / dalvikvm(369):VFY:死code 0x005e-0061在LCOM /例子/ indianconstitution / MainActivity; .displayView(我)V
07-16 14:49:59.870:I / dalvikvm(369):找不到方法android.content.pm.PackageManager.getActivityLogo,从方法android.support.v7.internal.widget.ActionBarView引用<初始化方式>
07-16 14:49:59.870:W / dalvikvm(369):VFY:无法解析虚方法325:Landroid /内容/ PM /软件包管理系统; .getActivityLogo(Landroid /内容/组件名;)Landroid /图形/绘制/可绘制;
07-16 14:49:59.870:D / dalvikvm(369):VFY:更换运code 0x6e在0x008b
07-16 14:49:59.880:I / dalvikvm(369):找不到方法android.content.pm.ApplicationInfo.loadLogo,从方法android.support.v7.internal.widget.ActionBarView引用<初始化方式>
07-16 14:49:59.880:W / dalvikvm(369):VFY:无法解析虚方法321:Landroid /内容/ PM / ApplicationInfo; .loadLogo(Landroid /内容/ PM /软件包管理系统;)Landroid /图形/绘/可绘制;
07-16 14:49:59.880:D / dalvikvm(369):VFY:在更换运code 0x6e 0x0099
07-16 14:49:59.890:D / dalvikvm(369):VFY:死code 0x008e-0092在Landroid /支持/ V7 /内部/空间/ ActionBarView;<&初始化GT; (Landroid /内容/上下文; Landroid / UTIL / AttributeSet中;)V
07-16 14:49:59.890:D / dalvikvm(369):VFY:死code 0x009c-00A0在Landroid /支持/ V7 /内部/空间/ ActionBarView;<&初始化GT; (Landroid /内容/上下文; Landroid / UTIL / AttributeSet中;)V
07-16 14:50:00.170:I / dalvikvm(369):找不到方法com.example.indianconstitution.MainActivity.invalidateOptionsMenu,从方法com.example.indianconstitution.MainActivity $ 1.onDrawerClosed引用
07-16 14:50:00.170:W / dalvikvm(369):VFY:无法解析虚方法8573:LCOM /例子/ indianconstitution / MainActivity; .invalidateOptionsMenu()V
07-16 14:50:00.170:D / dalvikvm(369):VFY:更换运code 0x6e在0x002d
07-16 14:50:00.180:D / dalvikvm(369):VFY:死code 0x0030-0030在LCOM /例子/ indianconstitution / MainActivity $ 1; .onDrawerClosed(Landroid /视图/视图;)V
07-16 14:50:00.180:I / dalvikvm(369):找不到方法com.example.indianconstitution.MainActivity.invalidateOptionsMenu,从方法com.example.indianconstitution.MainActivity $ 1.onDrawerOpened引用
07-16 14:50:00.180:W / dalvikvm(369):VFY:无法解析虚方法8573:LCOM /例子/ indianconstitution / MainActivity; .invalidateOptionsMenu()V
07-16 14:50:00.180:D / dalvikvm(369):VFY:更换运code 0x6e在0x002d
07-16 14:50:00.180:D / dalvikvm(369):VFY:死code 0x0030-0030在LCOM /例子/ indianconstitution / MainActivity $ 1; .onDrawerOpened(Landroid /视图/视图;)V
07-16 14:50:00.200:D / AndroidRuntime(369):关闭VM
07-16 14:50:00.200:W / dalvikvm(369):主题ID = 1:螺纹未捕获的异常退出(组= 0x4001d800)
07-16 14:50:00.220:E / AndroidRuntime(369):致命异常:主要
07-16 14:50:00.220:E / AndroidRuntime(369):java.lang.NoClassDefFoundError的:com.example.indianconstitution.PhotoFragment
07-16 14:50:00.220:E / AndroidRuntime(369):在com.example.indianconstitution.MainActivity.displayView(MainActivity.java:180)
07-16 14:50:00.220:E / AndroidRuntime(369):在com.example.indianconstitution.MainActivity.onCreate(MainActivity.java:135)
07-16 14:50:00.220:E / AndroidRuntime(369):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-16 14:50:00.220:E / AndroidRuntime(369):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-16 14:50:00.220:E / AndroidRuntime(369):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-16 14:50:00.220:E / AndroidRuntime(369):在android.app.ActivityThread.access $ 2300(ActivityThread.java:125)
07-16 14:50:00.220:E / AndroidRuntime(369):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)
07-16 14:50:00.220:E / AndroidRuntime(369):在android.os.Handler.dispatchMessage(Handler.java:99)
07-16 14:50:00.220:E / AndroidRuntime(369):在android.os.Looper.loop(Looper.java:123)
07-16 14:50:00.220:E / AndroidRuntime(369):在android.app.ActivityThread.main(ActivityThread.java:4627)
07-16 14:50:00.220:E / AndroidRuntime(369):在java.lang.reflect.Method.invokeNative(本机方法)
07-16 14:50:00.220:E / AndroidRuntime(369):在java.lang.reflect.Method.invoke(Method.java:521)
07-16 14:50:00.220:E / AndroidRuntime(369):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
07-16 14:50:00.220:E / AndroidRuntime(369):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-16 14:50:00.220:E / AndroidRuntime(369):在dalvik.system.NativeStart.main(本机方法)

我试着在这些问题提供的所有答案,但没有帮助:

我尝试添加 Android的支持 - v4.jar 还,但它是与应用程序兼容性冲突的,所以我删除V4罐子。

我应该怎么办?任何想法?

编辑:这是我怎么称呼光碎片类使用 displayView(7)在最后的的onCreate

  @燮pressLint(NewApi)
私人无效displayView(INT位置){
    //更新替换片段的主要内容
    片段片段= NULL;
    开关(位置){
    情况下0:
        片段=新IntroductionFragment();
        打破;
    情况1:
        片段=新的prefaceFragment();
        打破;
    案例2:
        片段=新的preambleFragment();
        打破;
    案例3:
        片段=新ContentsFragment();
        打破;    情况4:
        片段=新SchedulesFragment();
        打破;
    情况5:
        片段=新AppendixFragment();
        打破;
    情况6:
        片段=新AmendmentFragment();
        打破;
    案例7:
        片段=新的光碎片();
        打破;
    默认:
        打破;
    }    如果(片段!= NULL){
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container,片段).commit();        //更新所选项目和标题,然后关上抽屉
        mDrawerList.setItemChecked(位置,真正的);
        mDrawerList.setSelection(位置);
        (navMenuTitles [位置])的setTitle;
        mDrawerLayout.closeDrawer(mDrawerList);
    }其他{
        //错误创建片段
        Log.e(MainActivity,出错创建片段);
    }
}


解决方案

getFragmentManager仅在API11增加(的http://developer.android.com/reference/android/app/Fragment.html#getFragmentManager())你应该改变code使用getSupportFragmentManager()。你可以找到关于Android的支持 - v4.jar的API,这里更多的信息(的 http://developer.android.com/reference/android/support/v4/app/Fragment.html )。

您需要使用Android系统的支持,v4.jar支持片段的Andr​​oid 2.2

For making my app compatible down to API 2.2, I added Android compatibility library appcompat_v7 & changed the necessary things according.

The app is running fine in the newer versions but crashes in version 2.2.

You can see my logcat output

07-16 14:49:59.551: D/dalvikvm(369): VFY: dead code 0x005e-0061 in Lcom/example/indianconstitution/MainActivity;.displayView (I)V
07-16 14:49:59.870: I/dalvikvm(369): Could not find method android.content.pm.PackageManager.getActivityLogo, referenced from method android.support.v7.internal.widget.ActionBarView.<init>
07-16 14:49:59.870: W/dalvikvm(369): VFY: unable to resolve virtual method 325: Landroid/content/pm/PackageManager;.getActivityLogo (Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;
07-16 14:49:59.870: D/dalvikvm(369): VFY: replacing opcode 0x6e at 0x008b
07-16 14:49:59.880: I/dalvikvm(369): Could not find method android.content.pm.ApplicationInfo.loadLogo, referenced from method android.support.v7.internal.widget.ActionBarView.<init>
07-16 14:49:59.880: W/dalvikvm(369): VFY: unable to resolve virtual method 321: Landroid/content/pm/ApplicationInfo;.loadLogo (Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;
07-16 14:49:59.880: D/dalvikvm(369): VFY: replacing opcode 0x6e at 0x0099
07-16 14:49:59.890: D/dalvikvm(369): VFY: dead code 0x008e-0092 in Landroid/support/v7/internal/widget/ActionBarView;.<init> (Landroid/content/Context;Landroid/util/AttributeSet;)V
07-16 14:49:59.890: D/dalvikvm(369): VFY: dead code 0x009c-00a0 in Landroid/support/v7/internal/widget/ActionBarView;.<init> (Landroid/content/Context;Landroid/util/AttributeSet;)V
07-16 14:50:00.170: I/dalvikvm(369): Could not find method com.example.indianconstitution.MainActivity.invalidateOptionsMenu, referenced from method com.example.indianconstitution.MainActivity$1.onDrawerClosed
07-16 14:50:00.170: W/dalvikvm(369): VFY: unable to resolve virtual method 8573: Lcom/example/indianconstitution/MainActivity;.invalidateOptionsMenu ()V
07-16 14:50:00.170: D/dalvikvm(369): VFY: replacing opcode 0x6e at 0x002d
07-16 14:50:00.180: D/dalvikvm(369): VFY: dead code 0x0030-0030 in Lcom/example/indianconstitution/MainActivity$1;.onDrawerClosed (Landroid/view/View;)V
07-16 14:50:00.180: I/dalvikvm(369): Could not find method com.example.indianconstitution.MainActivity.invalidateOptionsMenu, referenced from method com.example.indianconstitution.MainActivity$1.onDrawerOpened
07-16 14:50:00.180: W/dalvikvm(369): VFY: unable to resolve virtual method 8573: Lcom/example/indianconstitution/MainActivity;.invalidateOptionsMenu ()V
07-16 14:50:00.180: D/dalvikvm(369): VFY: replacing opcode 0x6e at 0x002d
07-16 14:50:00.180: D/dalvikvm(369): VFY: dead code 0x0030-0030 in Lcom/example/indianconstitution/MainActivity$1;.onDrawerOpened (Landroid/view/View;)V
07-16 14:50:00.200: D/AndroidRuntime(369): Shutting down VM
07-16 14:50:00.200: W/dalvikvm(369): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
07-16 14:50:00.220: E/AndroidRuntime(369): FATAL EXCEPTION: main
07-16 14:50:00.220: E/AndroidRuntime(369): java.lang.NoClassDefFoundError: com.example.indianconstitution.PhotoFragment
07-16 14:50:00.220: E/AndroidRuntime(369):  at com.example.indianconstitution.MainActivity.displayView(MainActivity.java:180)
07-16 14:50:00.220: E/AndroidRuntime(369):  at com.example.indianconstitution.MainActivity.onCreate(MainActivity.java:135)
07-16 14:50:00.220: E/AndroidRuntime(369):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-16 14:50:00.220: E/AndroidRuntime(369):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-16 14:50:00.220: E/AndroidRuntime(369):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-16 14:50:00.220: E/AndroidRuntime(369):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-16 14:50:00.220: E/AndroidRuntime(369):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-16 14:50:00.220: E/AndroidRuntime(369):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-16 14:50:00.220: E/AndroidRuntime(369):  at android.os.Looper.loop(Looper.java:123)
07-16 14:50:00.220: E/AndroidRuntime(369):  at android.app.ActivityThread.main(ActivityThread.java:4627)
07-16 14:50:00.220: E/AndroidRuntime(369):  at java.lang.reflect.Method.invokeNative(Native Method)
07-16 14:50:00.220: E/AndroidRuntime(369):  at java.lang.reflect.Method.invoke(Method.java:521)
07-16 14:50:00.220: E/AndroidRuntime(369):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-16 14:50:00.220: E/AndroidRuntime(369):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-16 14:50:00.220: E/AndroidRuntime(369):  at dalvik.system.NativeStart.main(Native Method)

I tried all answers provided in these questions but no help:

I tried adding android-support-v4.jar also but it was conflicting with the appcompat, so I removed v4 jar.

What should I do now ? Any Idea?

EDIT: This is how I call PhotoFragment class by using displayView(7) at the last in onCreate

    @SuppressLint("NewApi")
private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
    case 0:
        fragment = new IntroductionFragment();
        break;
    case 1:
        fragment = new PrefaceFragment();
        break;
    case 2:
        fragment = new PreambleFragment();
        break;
    case 3:
        fragment = new ContentsFragment();
        break;

    case 4:
        fragment = new SchedulesFragment();
        break;
    case 5:
        fragment = new AppendixFragment();
        break;
    case 6:
        fragment = new AmendmentFragment();
        break;
    case 7:
        fragment = new PhotoFragment();
        break;
    default:
        break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}

解决方案

getFragmentManager was only added in API11 (http://developer.android.com/reference/android/app/Fragment.html#getFragmentManager()) You should change the code to use getSupportFragmentManager(). You can find more information about the api of android-support-v4.jar here(http://developer.android.com/reference/android/support/v4/app/Fragment.html).

You need to use android-support-v4.jar to support fragments in android 2.2

这篇关于java.lang.NoClassDefFoundError的:Android的兼容性问题2.2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆