安卓Facebook SDK出现错误java.lang.NoClassDefFoundError‎。

10

我刚从http://github.com/facebook/facebook-android-sdk下载了Facebook SDK。 我在git上解压它并打开了Eclipse。 然后,我使用现有源代码创建了一个新项目,并选择了facebook目录。 因此,sdk项目正确地出现了(我认为是这样的)。 然后,我再次使用现有源代码创建了一个新项目,并选择了“Simple”示例。 它出现了错误。 我进入属性,选择Build Path部分,添加了Facebook SDK项目并应用。 所有错误都消失了。 然后,我尝试运行示例,但在第一个调用Facebook SDK函数时遇到异常! 异常是NoClassDefFoundError。 在运行时似乎找不到SDK的类。 为什么? 有什么建议吗? 有人成功运行过这个示例吗? 非常感谢任何帮助。


1
目前,我发现唯一的解决方案是将SDK类完全集成到我的项目中。这并不太好。 - Fabien
1
我正在使用Android Studio。我刚刚在我的构建Gradle文件中添加了Facebook SDK。如何解决Android Studio中的此错误? - Kaveesh Kanwal
10个回答

22

在项目中右键点击,选择属性->Android。在Library下点击Add...按钮并选择Facebook SDK Project的路径。


12

我曾遇到过和你一样的问题,另一个问题线程中有一条建议是将 Android Facebook SDK 导出为 jar 文件,然后将该文件添加到你的项目中。

虽然有些人说之前的解决方案对他们有效,但对我没有用!

唯一有效的方法是:将 Android Facebook SDK 的六个类复制到我的项目中,这样就解决了我的问题。

步骤:

1- 我只需从 Android SDK 中复制以下 6 个类到我的项目中 AsyncFacebookRunner.java DialogError.java Facebook.java FacebookError.java FbDialog.java Util.java

2- 我还将 facebook_icon.png 文件从 drawable 文件夹中复制到我的 drawable 文件夹中。

3- 在已复制的 FbDialog.java 类中导入了我的 R.java 类。

我的建议是首先尝试 jar 解决方案(因为这是作为开发者整洁的方式),如果它对你无效,则尝试我的解决方案(因为这是解决问题的一种方式)。

谢谢,希望能解决你的问题。

Mohamed。


我成功地导出了Jar文件,但是遇到了重复的AndroidManifest.xml文件的问题。我设法将整个jar(包括资源)导出,但在为com_facebook_android创建jar时取消了AndroidManifest的选择。希望这能帮助到某些人。 - Chrispix
1
你的解决方案很好!问题是我的项目中有一个不相关的包“com.facebook.android”。看起来很奇怪。 - emeraldhieu

3

我通过对我的项目和引用的Facebook库项目进行清理构建来克服了这个错误。

以下是具体步骤:

在Eclipse中:

1) Select Project -> Clean
2) Select both your project and facebook sdk project
3) select OK

这是正确的方法。我通过清理Facebook SDK项目来解决了这个问题。我的项目重新生成了com.facebook.android.R,一切都很顺利。避免直接复制文件到您的项目中,因为这会使更新变得更加困难。 - Raphaël Agneau de Selve

3
我之前也遇到了同样的问题。我通过将Facebook SDK库以及我的项目(我想要链接Facebook SDK的项目)放在同一个工作区中来解决这个问题。现在,进入您的项目->右键单击->属性->Android->向下滚动->添加->选择到Facebook SDK的路径->按ok。
这样就可以将Facebook SDK链接到您的项目中。仅添加Facebook jar会导致异常,因为它不包含所有类。

0

我有类似的问题。我正在构建一个包含活动的库项目以及使用该库的主项目。我遇到了这些问题。我已将库添加到“项目属性/Android”部分并将其放在底部,正如之前正确建议的那样,但这还不够(请注意,两个项目都可以编译成功)。我必须更改库项目并使用完整的布局路径:

setContentView(com.example.mylib.R.layout.activity_main1);

请注意,仅使用R.layout不足够,尽管我已经定义了:
import com.example.mylib.R;

但是有效的替代方案是:

import com.example.mylib.R.layout;
setContentView(layout.activity_main1);

使用Eclipse。
祝对某人有所帮助。

0

我曾经遇到过这个问题。通过以下步骤,我解决了这个问题:

  1. 从Eclipse中删除所有示例项目和Facebook SDK
  2. 再次导入SDK和示例项目,但这一次请勾选“将项目复制到工作区”选项。
  3. 重新构建SDK和示例项目
  4. 完成!

0

我也遇到了这个异常,尝试了几乎所有我能找到的方法。但是后来我将Facebook SDK项目复制到我的工作区文件夹中,然后在我的项目中引用它,问题就解决了。

不知道为什么会出现这种情况,因为我在添加引用时已经提供了路径,但无论如何,这解决了问题。


0

尝试在属性 -> Java Build Path -> Order and Export中标记复选框。

我遇到了与UiLifecycleHelper相同的问题,同时检查Android Dependenciesandroid-support-v4.jar可以完美解决。最好在此之后运行一次清理操作。


0

下载bolts-android1.1.2并将其放入\libs文件夹中。然后打开项目属性->Java Build Path->Project选项卡,添加Facebook SDK。(Facebook SDK库必须与项目附加)


-1

新的Facebook SDK已经包含了android.support.V4.jar。

当你创建一个新的Android应用程序时,它甚至包含其中一个。

因此,当您检查控制台时,您会收到名为JAR不匹配的错误消息。

在这种情况下,选择Android项目的属性 -> Java Build path ->

选择库选项卡 -> 删除android.support.V4.jar 选择顺序和导出并取消选中 -> 引用库(android.support.V4.jar)

这将解决问题。


1
这与这个问题无关。 - Fran Marzoa

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