使用AndroidAnnotations的ClassNotFoundException

使用AndroidAnnotations的ClassNotFoundException,android,android-annotations,Android,Android Annotations,我试图使用AndroidAnnotations,但在项目中出现ClassNotFoundException错误 出于测试目的,我用一个活动创建了一个新项目,但仍然得到了错误。 我的文件: AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ro

我试图使用AndroidAnnotations,但在项目中出现
ClassNotFoundException
错误

出于测试目的,我用一个
活动创建了一个新项目,但仍然得到了错误。
我的文件:

AndroidManifest.xml

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

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.rodrigora.testannotations.MainActivity_"
            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>
以下是我从Eclipse创建的示例项目中更改的两个文件,并按照以下步骤将AndroidAnnotations添加到项目中:

  • 添加了
    androidannotations-api-2.7.jar
    libs
    文件夹和
    build path
  • 添加了
    androidannotations-2.7.jar
    compiled libs
    文件夹和
    Factory Path
  • 在订购和导出选项卡中标记了
    androidannotations-2.7.jar
  • 这里是我启动应用程序时的堆栈跟踪:

    12-28 20:29:21.296: E/AndroidRuntime(30600): FATAL EXCEPTION: main
    12-28 20:29:21.296: E/AndroidRuntime(30600): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.rodrigora.testannotations/com.rodrigora.testannotations.MainActivity_}: java.lang.ClassNotFoundException: com.rodrigora.testannotations.MainActivity_ in loader dalvik.system.PathClassLoader[/data/app/com.rodrigora.testannotations-2.apk]
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1573)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.os.Handler.dispatchMessage(Handler.java:99)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.os.Looper.loop(Looper.java:130)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread.main(ActivityThread.java:3687)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at java.lang.reflect.Method.invokeNative(Native Method)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at java.lang.reflect.Method.invoke(Method.java:507)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at dalvik.system.NativeStart.main(Native Method)
    12-28 20:29:21.296: E/AndroidRuntime(30600): Caused by: java.lang.ClassNotFoundException: com.rodrigora.testannotations.MainActivity_ in loader dalvik.system.PathClassLoader[/data/app/com.rodrigora.testannotations-2.apk]
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1565)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    ... 11 more
    
    有人知道我忘了什么吗? Eclipse应该通过
    AndroidAnnotations
    显示生成的类

    谢谢大家!

    编辑


    您的生成中似乎没有包含AndroidAnnotation生成的类。以下是您的.classpath似乎缺少的行--

    
    
    这些应该是在AndroidAnnotations安装之后为您生成的。要检查的东西--

    • 您的ADT工具是最新的

    • 启用注释后,您运行了
      Project->Clean

    我可以通过以下步骤克隆您的repo,导入到eclipse中,获得一个干净的构建并运行应用程序,而不会出现崩溃--

  • 将项目重构/重命名为TestAnnotations(eclipse作为“MainActivity”导入)
  • 启用注释处理(需要在“Java编译器->注释处理”中打开
    启用项目特定设置
    启用注释处理
  • 项目->清洁
  • 运行它

  • 注意:如果我进行了导入,只是进行了重构以获得一个干净的构建,但没有启用注释处理,那么我得到的行为与您描述的完全相同。检查以确保启用了项目特定的设置,启用了注释,然后执行干净的生成

    使用maven和eclipse更新项目配置会导致android注释输出文件夹发生更改。要修复它,请转到java build path>Source并将android注释文件夹的输出设置为默认输出文件夹

    您必须启用注释预处理器或类似的功能。。。你做了吗?是的,错误日志显示
    android注释
    消息。示例:
    由AndroidAnnotations生成的文件数:1
    您可以将这些注释文件下载吗???@Rajesh,请参见我的编辑!生成的类应该在eclipse中可见?不,它们不会出现在eclipse中。它们通常被视为临时文件,因为每次生成时都会重新生成它们。它们是在隐藏目录中创建的(
    .apt_generated
    )。使它们不可见有助于您记住不要更改它们,因为您对它们所做的任何更改都将被下一个版本覆盖。在我的例子中,我没有检查
    项目设置
    ->
    Java编译器
    ->
    注释处理
    ->
    启用特定于项目的设置
    。当我启用此复选框时,我得到了MainActivity生成的文件。
    12-28 20:29:21.296: E/AndroidRuntime(30600): FATAL EXCEPTION: main
    12-28 20:29:21.296: E/AndroidRuntime(30600): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.rodrigora.testannotations/com.rodrigora.testannotations.MainActivity_}: java.lang.ClassNotFoundException: com.rodrigora.testannotations.MainActivity_ in loader dalvik.system.PathClassLoader[/data/app/com.rodrigora.testannotations-2.apk]
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1573)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.os.Handler.dispatchMessage(Handler.java:99)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.os.Looper.loop(Looper.java:130)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread.main(ActivityThread.java:3687)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at java.lang.reflect.Method.invokeNative(Native Method)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at java.lang.reflect.Method.invoke(Method.java:507)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at dalvik.system.NativeStart.main(Native Method)
    12-28 20:29:21.296: E/AndroidRuntime(30600): Caused by: java.lang.ClassNotFoundException: com.rodrigora.testannotations.MainActivity_ in loader dalvik.system.PathClassLoader[/data/app/com.rodrigora.testannotations-2.apk]
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1565)
    12-28 20:29:21.296: E/AndroidRuntime(30600):    ... 11 more
    
       <classpathentry kind="src" path=".apt_generated">
                   <attributes>
                           <attribute name="optional" value="true"/>
                   </attributes>
       </classpathentry>