FragmentActivity导致ClassNotFoundException

时间:2012-03-29 18:13:58

标签: android crash compatibility

我刚刚使用Android SDK Manager将Android SDK工具更新到版本17,将Android兼容性更新到版本7.现在,我运行的程序在启动时已经崩溃了几年。

缩小问题范围,我创建了一个新的空白项目,将android-support-v4.jar添加到构建路径,并将Activity更改为FragmentActivity,这就是全部。现在它崩溃了。

错误消息是:

java.lang.ClassNotFoundException: com.example.test.TestActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.test-2.apk]

代码是:

package com.example.test;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class TestActivity extends FragmentActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

其他所有内容(包括清单)与默认值相同。非常感谢任何帮助!

编辑:清单包含在下面:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="9" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".TestActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

8 个答案:

答案 0 :(得分:27)

原来这是Android SDK Tools r17的问题。我以前一直在使用教程中给出的方法:

http://mobile.tutsplus.com/tutorials/android/android-compatibility-working-with-fragments/

然而,这不再适用。相反,我需要做的就是在Eclipse中右键单击我的项目并选择Android Tools - &gt;添加支持库...

执行此操作意味着不再需要转到Java Build Path并单击“添加外部JAR ...”

非常感谢eMich提供的解决方案:Jar-file issue with ADT r17

答案 1 :(得分:11)

我有同样的问题,我在stackoverflow中找到的答案都没有解决我的问题。经过几个小时(多次)反复试验,我通过配置项目的构建路径解决了我的问题。在Eclipse中,右键单击项目&gt; Build Path&gt; Configure Build Path...,在Order and Export标签中,选中Android Private Libraries,然后点击OK。之后,清理项目并再次尝试运行。

我通过将我的项目与可以按预期运行的其他(新创建的)项目进行比较来解决了这个问题。我比较了它们的每个配置和AndroidManifest.xml。

希望这也有助于你:)

更新其他解决方案:使用ANT

我找到了解决这个问题的另一种方法:使用ANT。我的朋友面临同样的问题,但修复构建路径并没有解决他的问题。我不知道是不是因为我们使用的是不同的IDE版本,不同的ADT版本或不同的操作系统(我使用的是GNU / Linux)。然后,我建议他使用ANT而不是IDE的那个。

首先,通过为每个项目(包括库项目)执行build.xml来设置项目(创建android update project -p <project-dir> -n <project-name>)。然后,从主项目的目录中,执行ant debug构建,ant installd进行安装,然后运行应用程序。

奇怪的是,一旦他以这种方式成功,他甚至可以再次使用IDE进行编译,而不需要ANT。

答案 2 :(得分:0)

我认为片段活动是否在清单中正确列出?这是我在Manifest中的主要FragmentActivity类:

    <activity android:name=".Polling" android:label="@string/app_name"
        android:windowSoftInputMode="stateHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

答案 3 :(得分:0)

在Package Explorer中选择您的项目&gt;右键单击&gt; Android工具&gt;修复PRoject属性 并且 试试Project&gt;清洁

然后重新运行。

答案 4 :(得分:0)

我得到了

 java.lang.NoClassDefFoundError: com.android.example.SupportFragment
    at com.android.example.SupportFragmentActivity.onCreate()

on PopupMenu

SupportFragment extends SherlockFragment implements PopupMenu.OnMenuItemClickListener
...
    @Override
    public boolean onMenuItemClick(android.view.MenuItem item) {
        return onOptionsItemSelected(item);
    }

当尝试使api 17应用程序与api 8兼容时,唯一的指示是上面的logcat错误,因此如果出现此错误,请检查是否支持所有导入的类。

答案 5 :(得分:0)

通过执行构建路径解决了同样的问题 - >配置构建路径 - >订单和导出 - >检查添加私有库 - &gt;确定。

然后清理项目。

解决了一个大问题。

答案 6 :(得分:0)

我也遇到了同样的问题,并通过以下方式解决了这个问题。 如果由于某种原因你在构建路径中对私有库进行了UNCHECKED,那么只需在构建路径中添加Androidv-4 jar并在&#34; Order and Export&#34;中启用(检查)它。标签

答案 7 :(得分:-1)

  1. 删除有关v7或v4的所有lib。移动你的Android项目,Alt + Enter,单击android,看看是lib:确保没有关于v7或v4 lib的信息
  2. 添加v4 lib
  3. 清洁项目
  4. 再次跑步
  5. enter image description here enter image description here enter image description here

    如果删除v7,则会出现样式错误...您可能会看到这个

    enter image description here