代码之家  ›  专栏  ›  技术社区  ›  Tom R

NoClassDefFoundError-Eclipse和Android

  •  194
  • Tom R  · 技术社区  · 15 年前

    我在尝试运行Android应用程序时遇到了一个问题,在向其构建路径添加第二个外部库之前,该应用程序运行良好。自从加入了忍者罐,我现在得到了一个 当我尝试运行应用程序时。

    以下是信息:

    02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter
    

    27 回复  |  直到 12 年前
        1
  •  235
  •   John O'Connor    13 年前

    我在更新ADT后遇到了这个问题。

    我将所有JAR文件存储在一个名为“lib”的文件夹中,并以普通的Eclipse方式将JAR添加到构建路径中。在我更新之前这一切都很好。

    更新之后,我得到了一个类的NoClassDefFoundError,我可以清楚地看到这个类包含在jar中(检查ReferencedLibraries类)。

    解决方案是从构建路径中删除jar,并将“lib”文件夹重命名为“libs”。这是一个ant约定,似乎是新ADT在.apk文件中查找和包含库的方式。一旦我这么做了,一切都很顺利。

        2
  •  100
  •   Till - gotohuman.com    13 年前

    我不必将jar库放在assets或lib中,只需在Properties中为这个jar打勾->Java生成路径->订单和导出”(之前已列出,但未选中)

        3
  •  68
  •   Anthony Forloney    15 年前

    通过将外部jar添加到构建路径中,只会将jar添加到包中,但在运行时它将不可用。

    为了让罐子在 运行时

    • assets 文件夹
    • 转到同一弹出窗口上的“导出”选项卡
    • 选中新添加的jar对应的框
        4
  •  48
  •   abbood    11 年前

    我用这个做活动。Eclipse中的生成在调试器中找到NoClassDef。

    忘记将库添加到清单,内部 <Application>...</Application> 要素

    <uses-library android:name="com.google.android.maps" />
    
        5
  •  27
  •   Andrew Krizhanovsky    13 年前

    我已经更改了所包含项目的顺序(Eclipse/配置构建路径/顺序和导出)。我已经将我的两个相关项目移到了“订单和导出”列表的顶部。它解决了“NoClassDefFoundError”问题。

    对我来说很奇怪。我没有听说过包含的库和项目的顺序的重要性。Android+Eclipse很有趣:)

        6
  •  15
  •   Brian    14 年前

    我不确定这是否相关,或者你是否还在寻找答案,但我在试图研究同一个错误时遇到了这个问题(但可能是因为不同的原因)。

    我在网上找不到任何解决方案,但一个类似问题的答案让我思考,并意识到我可能只需要重建(或清理)项目。

    在Eclipse中,转到Project=>干净。选择您的项目,Eclipse似乎会自己修复它。对我来说这解决了问题。

    希望这有帮助。

        7
  •  13
  •   assylias    12 年前

    我也遇到过同样的问题。原因是我尝试使用的库是用标准的jdk7编译的。

    -source 1.6 -target 1.6 而且效果很好。

        8
  •  7
  •   vlad    13 年前

    对我来说也是一样:属性->Java生成路径->“订购和出口” 有趣的是-为什么这不是自动完成的? 我想少了些背景。在SDK升级之后,我也遇到了这种情况。

        9
  •  3
  •   sathish_at_madison    12 年前

    右键单击您的项目文件夹,在Java构建路径中查找属性并选择您看到的jar文件。这对我很有效。

        10
  •  3
  •   Himanshu THE ONLY ONE    12 年前

    约翰·奥康纳在这个问题上是对的。问题在于安装ADT 17及以上版本。找到此链接以修复错误:

    http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17

        11
  •  2
  •   Eli    12 年前

    我尝试了这篇文章(以及其他一些文章)中的所有内容,但都不适用于我,这是迄今为止我经历过的最糟糕的ADT升级,没有可用的ADT备份,我永远不会升级。

    我设法解决了这个问题,删除了这个项目,然后使用我的源代码备份再次添加它。

        12
  •  2
  •   prijupaul    11 年前

        13
  •  2
  •   Golden Thumb    11 年前

    所有现有的答案都不适合我,因为我的情况有点不同。我花了几个小时才把它修好。我在用Eclipse。

    我的android项目包括另一个普通的java1.6项目,它需要一个第三方jar文件。诀窍是:

    • 同时将这个jar文件复制到android项目的“libs”文件夹中,这样它就可以在运行时使用了

    希望这能帮助像我这样有类似情况的人。

        14
  •  1
  •   Community CDub    8 年前

    有时,您必须将整个外部项目作为库,而不仅仅是jar:

    @style answer ):

    1. 文件->新建->其他
    2. 选择Android项目
    3. 选择“从现有源创建项目”
    4. 单击“浏览…”按钮并导航到 通缉项目
    5. 完成(现在是工作区中的操作栏项目)
    6. 右键单击项目->属性
    7. 选择最近添加的项目->好 啊
        15
  •  1
  •   Ravi Pandit    10 年前

    有时会发生这种情况,因为在AndroidManifest.xml中没有使用“uses libary”标记包含jar(您有依赖关系)。

    另外,确保它应该在“application”标签中。

    当做,

    拉维

        16
  •  1
  •   Sojan P R    10 年前

    我遇到了这个问题,它是由没有“导出”库引起的。这个问题仅仅是因为在打包APK时某些类的.class文件不可用。编译时它可以正常工作,而不需要进行求导

    在我的例子中,我使用的是“CusrsorAdapter”类和“JavaBuildPath->订购并导出“我没有检查支持v4jar。一旦它被选中,问题就消失了。

    为了确保由于上述原因您得到noClassDefFound错误,请检查您的日志,您将在运行时看到未知的超级类错误。

        17
  •  1
  •   Ashish Rawat    9 年前

    实际上,您已经达到了臭名昭著的64k限制问题,您需要启用multidex。

    你就是这样做的。 https://developer.android.com/tools/building/multidex.html

        18
  •  0
  •   Wahib Ul Haq    13 年前

    当做,

    瓦希布

        19
  •  0
  •   samir    12 年前

    请确保您的jar文件位于您的项目的libs目录中,因为您的eclipse使用的是更新的ADT版本。

        20
  •  0
  •   pkdkk    12 年前

    我也有同样的问题。。。为了解决这个问题,我在“构建路径”中删除了我的Android私有Libs,然后单击ok。。。当我再次打开op“构建路径”时,eclipse又自己添加了它们,然后它对我起了作用;)。。。

        21
  •  0
  •   Ron    12 年前

    在更新ADT之后,我花了两天时间试图解决这个问题。最后我很幸运在这里得到了这个帖子:

    https://code.google.com/p/android/issues/detail?id=55304

        22
  •  0
  •   arberg    12 年前

    如果你想知道哪些文件的解决办法是相关的,这里是我发现的。只需将.classpath文件更改为

    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
        <classpathentry kind="src" path="src"/>
        <classpathentry kind="src" path="gen"/>
        <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
        <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
        <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
        <classpathentry kind="output" path="bin/classes"/>
    </classpath>
    

    我相信这与上面解释的通过eclipse菜单(eclipse/Configure Build Path/Order and Export)的结果是一样的。

        23
  •  0
  •   Community CDub    8 年前

    解决方案 here 为我工作。只需将库导入libs文件夹,然后修改build.gradle文件,然后使用gradlew进行清理。

        24
  •  0
  •   geekgugi    11 年前

    如果在项目生成路径中更改顺序并导出,则不会发生此错误。 另一种实现方法是通过项目文件夹中的.classpath。

        25
  •  0
  •   user1606195    11 年前

    尝试this:-

    第一步

    在Eclipse中添加所有库以构建pat(意味着使所有库都被引用)

    第2步

    删除R.java文件并再次构建项目。别担心,R.java会自动被重新创建。

        26
  •  0
  •   user3060608 user3060608    11 年前

    据我所知,您的项目没有显示任何错误,因为您包含了Jar。但是当您的项目被“导出”到设备时,Jar将不会被使用。 试试这个

    项目->属性

    Java构建路径/顺序和导出

    []你的罐子

        27
  •  0
  •   tyolab    11 年前

    这种情况经常发生在我身上。

    最终,我用ADT将IDE切换到原来的Eclipse(开普勒),使这个应用程序再次工作(不再有NoCalssDeffoundError)。