无法解析Activity的超类

11

我在一个基于OpenGL ES 10的新项目中遇到了这个错误:

  09-03 12:44:07.870: W/dalvikvm(599): Unable to resolve superclass of Lcom/example/basicgl10test/MainActivity; (416)
  09-03 12:44:07.870: W/dalvikvm(599): Link of class 'Lcom/example/basicgl10test/MainActivity;' failed
  09-03 12:44:07.870: D/AndroidRuntime(599): Shutting down VM
  09-03 12:44:07.910: W/dalvikvm(599): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
  09-03 12:44:07.920: I/dalvikvm(599): Wrote stack traces to '/data/anr/traces.txt'
  09-03 12:44:07.980: E/AndroidRuntime(599): FATAL EXCEPTION: main
  09-03 12:44:07.980: E/AndroidRuntime(599): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.basicgl10test/com.example.basicgl10test.MainActivity}: java.lang.ClassNotFoundException: com.example.basicgl10test.MainActivity
  09-03 12:44:07.980: E/AndroidRuntime(599):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at android.os.Handler.dispatchMessage(Handler.java:99)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at android.os.Looper.loop(Looper.java:137)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at android.app.ActivityThread.main(ActivityThread.java:4424)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at java.lang.reflect.Method.invokeNative(Native Method)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at java.lang.reflect.Method.invoke(Method.java:511)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at dalvik.system.NativeStart.main(Native Method)
  09-03 12:44:07.980: E/AndroidRuntime(599): Caused by: java.lang.ClassNotFoundException: com.example.basicgl10test.MainActivity
  09-03 12:44:07.980: E/AndroidRuntime(599):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
  09-03 12:44:07.980: E/AndroidRuntime(599):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
  09-03 12:44:07.980: E/AndroidRuntime(599):    ... 11 more
  09-03 12:44:08.061: W/ActivityManager(92):   Force finishing activity com.example.basicgl10test/.MainActivity

我的Activity类是这样的:

  package com.example.basicgl10test;
  import com.example.gl10gameadvlib.GL10GameActivity;
  import com.example.gl10gameadvlib.Screen;
  public class MainActivity extends GL10GameActivity {

在另一个包中,父Activity的代码如下:

  package com.example.gl10gameadvlib;
  import javax.microedition.khronos.egl.EGLConfig;
  import javax.microedition.khronos.opengles.GL10;
  public abstract class GL10GameActivity extends Activity {

编译过程中没有错误。我已经重新创建了一个全新的项目,也执行了清理+构建操作,但问题仍然存在。

我正在使用Eclipse IDE和Android 4.0模拟器。问题与任何模拟器或实际设备都存在。

谢谢 Souvik


1
你把包含 GL10GameActivity 类的 jar 放在哪里了? - sdabet
你在Android清单文件中配置了你的Activity吗? - Praful Bhatnagar
只需尝试这个 - Praveenkumar
5个回答

63

GOOGLE IO 2013 后,我更新了 ADT插件、Android SDK工具至 Revision 22 ,以及 Android SDK平台工具至 Revision 17,然后我面临了以下问题:

之前能够正常运行的所有项目,在更新后都因为找不到类而抛出 ClassNotFoundException 异常,但没有任何原因。 接着,我发现有一个新的 Android 包叫做 Android Private Libraries,经过几个小时的尝试,我终于找到了解决方法。

右键单击你的项目,然后

转到“Build Path-> Configure Build Path -> Order and Export”

在这里,你应该勾选 Android Private Libraries,然后点击 OK。

如果仍然存在问题,请删除 bin 文件夹中的所有文件并重新构建项目。

希望这可以解决你的问题。


4
非常感谢!我也遇到了与此完全相同的问题,这是在2013年I/O之后升级SDK后出现的。 - user1990252
@Joram Teusink 很高兴能帮助。 - Sheraz Ahmad Khilji
1
非常感谢,之前浪费了3个小时来弄清楚到底发生了什么鬼,直到偶然看到了你的帖子。 - Tony
已经为此苦苦挣扎了几个小时了...谢谢Sheraz - Plumillon Forge
这对我也起作用,但由于我有100多个Eclipse项目,我发现步骤Build Path-> Configure Build Path -> Order and Export -> Android Private Libraries与在.classpath中用<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>替换<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>是相同的,所以我能够在所有项目中搜索和替换它,然后删除bin和gen文件夹,它就可以工作了! - DaveAlden
显示剩余2条评论

3
为确保在构建时实际导出您的jar文件,您应该采取以下措施之一:
  • 将其放入libs文件夹中
  • 或者在项目属性 > Java构建路径 > 顺序和导出选项卡中勾选与您的jar文件对应的复选框

0

实际上,我正在导入的库也是一个Android项目,并且我已将其定义为库。在其他项目中,它的工作方式相同。

我的清单如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.basicgl10test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

    <!-- Only Single Touch and OpenGLES less than 2.0 versions used by default -->
    <!-- We will use both multi and single touch handlers by using a class based SDK Version qualifier -->
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

</manifest>

0
如果您正在使用一些外部库,除了在Eclipse中链接它之外,不要忘记将它们放在应用程序的“libs”文件夹中。它应该靠近/src、/res等文件夹,只需/libs/yourLibrary.jar。
这将告诉编译器(不完全准确)将此库包含到您的APK中。

0
我遇到了同样的问题。 我的解决方法如下:
1. 配置构建路径。 2. 选择“顺序和导出”选项卡, 3. 选择所有列出的路径或JAR文件。 4. 尝试一下!
祝你好运。

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