无法实例化活动java.lang.ClassNotFoundException

6

在开发过程中,我几次看到了以下错误,现在我收到了一份错误报告。我不知道是什么导致了这个问题。在阅读了本站上关于此问题的类似问题后,我再次检查了我的AndroidManifest,但我认为一切都很好。有什么可能会导致这个异常吗?

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.jerrellmardis.ridecta/com.jerrellmardis.ridecta.ui.StopTimesActivity}: java.lang.ClassNotFoundException: com.jerrellmardis.ridecta.ui.StopTimesActivity
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.jerrellmardis.ridecta.ui.StopTimesActivity
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
... 11 more

另一个需要注意的是,我正在使用在https://github.com/petedoyle/android-support-v4-googlemaps找到的android-support-v4-googlemaps库,它允许我在Fragment中嵌入一个MapView(连同ActionBarSherlock库一起使用)。这个异常看起来像是一个依赖问题,我不确定它是否与我上面提到的库的使用有关。
以下是清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jerrellmardis.ridecta"
    android:installLocation="internalOnly"
    android:versionCode="11"
    android:versionName="1.0.2">
    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="16"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="com.android.vending.BILLING"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <application
        android:name=".RideCtaApplication"
        android:allowBackup="true"
        android:backupAgent=".backup.RideCtaBackupAgentHelper"
        android:hardwareAccelerated="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:logo="@drawable/logo">
        <uses-library android:name="com.google.android.maps"/>
        <activity
            android:name=".ui.HomeActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/app_name"
            android:theme="@style/Theme.RideCta.LogoOnly">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.BusDirectionsActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.RideCta"/>
        <activity
            android:name=".ui.StopsActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.RideCta"/>
        <activity
            android:name=".ui.StopTimesActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.RideCta.Split"
            android:uiOptions="splitActionBarWhenNarrow"/>
        <activity
            android:name=".ui.TrainDirectionsActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.RideCta"/>
        <activity
            android:name=".ui.LiveMapActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.RideCta.Transparent"/>
        <activity
            android:name=".ui.ServiceAlertsActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.RideCta"/>
        <activity
            android:name=".ui.SearchActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/Theme.RideCta">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable"/>
        </activity>
        <activity
            android:name=".ui.PreferenceActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.Preference"/>
        <activity
            android:name=".ui.LegacyPreferenceActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.Preference"/>
        <activity
            android:name="com.google.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
        <receiver android:name=".receiver.ReminderAlarmReceiver"/>
        <receiver android:name=".receiver.ReminderBootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
        <receiver android:name="net.robotmedia.billing.BillingReceiver">
            <intent-filter>
                <action android:name="com.android.vending.billing.IN_APP_NOTIFY"/>
                <action android:name="com.android.vending.billing.RESPONSE_CODE"/>
                <action android:name="com.android.vending.billing.PURCHASE_STATE_CHANGED"/>
            </intent-filter>
        </receiver>
        <service android:name=".service.ReminderService"/>
        <service android:name="net.robotmedia.billing.BillingService"/>
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".ui.SearchActivity"/>
        <meta-data
            android:name="com.google.android.backup.api_key"
            android:value="<REMOVED>"/>
        <provider
            android:name=".provider.SearchProvider"
            android:authorities="com.jerrellmardis.ridecta.provider.SearchProvider"/>
    </application>
</manifest>

1
请检查您在Android清单文件中是否提到了正确的类名。 - Rahul Baradia
2
请发布您的(部分)清单 XML。此类位于哪里?在库项目中还是同一项目中? - JScoobyCed
你尝试过查看活动主题吗?android:theme="@style/Theme.RideCta.Split" android:uiOptions="splitActionBarWhenNarrow" - Radu Dan
活动StopTimesActivity继承自哪个类?SherlockActivity?SherlockFragmentActivity?只是想确定一下超类是否存在任何问题。此外,看起来您似乎没有使用proguard,但我想再次确认一下,是吗? - Robert Estivill
请发布您的活动代码。 - anz
显示剩余4条评论
9个回答

5
右键单击您的项目文件夹 => 属性 => Java构建路径 => 顺序和导出 => 如果未选中,请选中“Android私有库”复选框。进行清理即可解决问题!

2
系统无法找到您的类文件。这可能是因为您在清单文件中指定的类名规范有误,或者您的类存在于不同的包中,而您没有正确指定。
尝试清理并重建您的代码。有时我们需要在更新代码时进行清理。
此外,没有人能够通过仅阅读您的日志来找到错误。因此最好发布您的清单文件和所有类的名称。

1
将活动添加到清单文件中,如下所示...
<activity android:name=".FSRRemarks" >
        </activity>

如果您已经添加了它,请尝试清理并构建您的项目,然后运行


1
在我的经验中,如果您看到与无法加载资源或类相关的奇怪异常,而您绝对“知道”这些资源或类存在,那么问题可能与将活动推得太接近其内存限制有关。在几个占用大量内存的应用程序上工作后,我可以说我已经看到许多关于找不到资源的异常报告“在野外”,而我知道这些资源在生产构建中是正确包含的。
一般来说,在这些情况下,堆栈跟踪永远不会完全相同,因此,如果您始终看到相同的缺失类,则很可能是构建或项目配置错误。进行完整重建(正如其他人也建议的那样)可能会有所帮助。
否则,我建议使用像Crittercism这样的服务,在崩溃发生之前获取有关设备的更准确信息。

1
请按照以下步骤操作:
1. 从引用库中删除外部JAR包。不要再次添加到此处。
2. 在您的项目中创建另一个名为“libs”的文件夹。
3. 将您的JAR包复制并粘贴到“libs”文件夹中。
4. 清理并重新运行应用程序。
希望这能解决问题。

我目前有一个libs文件夹,其中包含所有不是Android库的外部jar。 - oracleicom
请检查这些 JAR 文件是否也在引用库文件夹中。 - Code Word

0

看起来我通过不使用android-support-v4-googlemaps库来修复了这个问题。我改变了我的应用程序,使用一个片段中的地图ImageView,然后一旦用户点击了地图图像,就使用了一个普通的MapActivity。自从这样做以来,我没有注意到任何RuntimeExceptions。


0
如果您已经将活动添加到AndroidManifest中,并且该活动确实存在于您的项目中,我建议您清理并重新构建,然后再试一次。 但是我遇到了另一个奇怪的问题,即由Ecplise构建的apk文件会崩溃并报告“应用程序中的ClassNotFoundException”问题,而由ant构建的apk文件可以正常运行,没有问题。
因此,也许您可以尝试使用ant来构建它,通过命令“android update project -p .”。

0
为避免出现这样的错误,请按照以下步骤创建新类:
  1. 在包资源管理器中双击 AndroidManifest.xml。
  2. 单击清单编辑器的“应用程序”选项卡
  3. 在屏幕左下角的“应用程序节点”标题下单击“添加..”
  4. 在弹出的对话框中从列表中选择 Activity(如果您有此选项,则要创建一个新的顶级元素)
  5. 单击窗口底部“属性”标题下的“名称*”链接,以为新活动创建一个类。
  6. 当您从新类对话框中单击“完成”时,它将带您进入新的活动类,以便您可以开始编码。
只需从您的活动中复制代码,删除文件并像这样重新创建它,所有与配置相关的问题都将得到解决。

0
你把 android-support-v4-googlemaps.jar 文件复制到哪里了?是放在 actionbarsherlock/library/libs 里还是你的应用程序的libs文件夹里?
请仔细检查,确保你没有包含两个不同版本的支持库(一个带有地图,另一个没有)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接