在模拟器/手机中运行应用程序时出现NoClassDefFoundError[更新到上一个问题]



这是我今天早些时候问的这个问题的更新。

问题的简要重申:我有一个Android应用程序,需要使用亚马逊的Android SDK for AWS。我将必要的库(JAR文件(添加到Eclipse构建路径中。然而,当我运行该应用程序时,该应用程序会崩溃,并出现NoClassDefFoundError。

经过一点调查,我已经隔离了导致错误的代码。我制作了一个简单的伪安卓应用程序,它使用了明显有缺陷的代码。此处是单个"活动"的源代码。这是logcat的输出。

我注意到了一些奇怪的事情。如果库没有被正确添加,它应该在第34行失败:

credentials = new BasicAWSCredentials( accessKeyId, secretKey );

但事实并非如此。相反,它在线路62处失效,线路62与线路48相连。

第62行:

sdb = new AmazonSimpleDBClient( credentials );

第48行(47的一部分(:

list.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, getInstance().listDomains().getDomainNames()));

有趣的是,SDK提供的示例项目运行得非常完美。以下是SimpleDB的代码,它是源文件之一。我基本上已经复制并粘贴了一些调用访问Amazon的SimpleDB的代码,但我的代码失败了,示例也没有。

那么,有人有什么想法吗?


事实证明,AWS SDK中的jar文件没有正确构建。他们似乎错过了一个不再公开发行的旧Apache库。亚马逊已经更新了下载,库不再抛出NoClassDefFoundError。

来源:AWS移动开发论坛上的论坛帖子

在大多数情况下,NoClassDefFoundError意味着类的重复版本在类路径上。我认为您应该检查您的依赖项/库是否有重复的.class文件。请先在您的jar-s:org.apache.commons.httpclient.params.HttpClientParams中检查此文件

希望它能有所帮助!

最新更新