Android java.lang.NoClassDefFoundError:org.jsoup.Jsoup

Android java.lang.NoClassDefFoundError: org.jsoup.Jsoup

我使用Eclipse版本:Indigo Service Release 2 Build ID:20120216-1857。
Android版本ist 2.2。
我制作了一个应用来测试连接并解析如下网站:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class TestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    try {
        Document doc = Jsoup.connect("http://example.com/").get();
        Elements divs = doc.select("div#test");

    for (Element div : divs) {
            System.out.println(div.text());
    }
    } catch (Exception e) {
    }
    }
}

清单文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
android:installLocation="preferExternal"
android:versionCode="1"
android:versionName="1.0">

<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">
    <activity
        android:name=".TestActivity"
        android:label="@string/app_name"
    android:configChanges="orientation"
    >
        <intent-filter>
           

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>            
        <uses-library android :name="org.jsoup.Jsoup" />
    </activity>
</application>

我将库jsoup-1.6.1.jar添加到JAVA Buildpath中,但出现运行时错误:
E / AndroidRuntime(736):java.lang.NoClassDefFoundError:org.jsoup.Jsoup

如何解决此错误?


最近更新了Android的ADT组件后,我遇到了这个确切的问题。似乎Android忽略了构建路径,而是使用ANT默认值。

我通过从构建路径中删除jar文件,在应用程序层次结构的"根目录"(以及src,gen等)中创建一个名为" libs"的文件夹,然后将.jar放在其中来解决此问题。当您清理/构建并重新启动应用程序时,该错误应消失。

仅供参考-发生这种情况是因为JAR文件未打包到.apk文件中-这就是为什么它可以正确构建,但在运行时在Android设备上不可用的原因。

参见NoClassDefFoundError-Eclipse和Android


还有一个问题是jar必须位于libs(带有's')目录中,而不是lib ....这可能是您的问题吗?


  • 右键单击项目名称>属性> Java构建路径>选项卡库,然后单击按钮添加外部jar。
  • 从下载jsoup-1.7.3.jar的目录中选择jar的路径。
  • 添加jar之后,转到下一个选项卡Order and export,然后选择复选框jsoup-1.7.3.jar
    4单击确定
    5.clean构建项目,然后运行。
  • 我按照上述步骤解决了相同的问题


    您不需要以下行:

    1
     <uses-library android:name ="org.jsoup.Jsoup"/>

    在清单文件中。使用Jsoup所需要做的就是通过执行以下操作来确保它是构建路径的一部分:

    • 右键单击您的项目,然后选择属性
    • 选择Java构建路径,然后选择添加外部JAR...。
    • 导航到Jsoup jar文件

    然后,Jsoup将像Java中的任何其他库一样工作。例如,在我的应用程序中,我像这样使用它:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        try
        {
                        Document doc = Jsoup.connect( myHtml ).get();

                        Elements table = doc.select("table#ctl00_ContentPlaceHolder1_tblPasses" );

                        // Returns first row of the table which we want
                        Elements row = table.select("tr.lightrow" );
                        Element record_One = row.first();
        }

    注意-因为它很长,所以我没有包含所有代码。无论如何,之后您只需要导入类,例如在我的类中,我使用以下代码:

    1
    2
    3
    4
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;


    我可以通过以下方法解决此问题:

  • 将jsoup jar放在" libs"文件夹中(如约翰的回答所述)
  • 从构建路径中删除" Android Dependencies"和" Android Private Libraries"
  • 使用Android工具>修复项目属性在构建路径中重新填充以上条目。

  • 你这样做是不对的。您不能在Activity的oncreate中使用Jsoup函数。
    您需要创建异步任务或线程。

    这是为了防止在您的活动中执行阻止任务。

    这是一个不错的博客,解释了如何做以及提供示例代码。

    示例代码点击这里


    我的解决方案是

  • 右键单击项目名称>属性> Java构建路径>选项卡库>除去" Android XX"(在我的情况下为2.3.3)和" Android Dependencies"(根据@KarlKarlsom找到的链接> android.foxykeep)之外的所有内容.com <来自堆栈问题> stack <)
  • 我在主要项目中创建了文件夹库。当我使用jsoup时,我将其移至该文件夹
  • 重新启动Eclipse,清理项目无效
  • ps我正在使用jsoup和sherlock。我没有更改Sherlock库,只有我的主要项目。


    只需关闭Eclipse并再次将其打开即可。问题将会解决。