Android java.lang.NoClassDefFoundError: org.jsoup.Jsoup - PullRequest
8 голосов
/ 30 марта 2012

Я работаю с Eclipse. Версия: Indigo Service Release 2, идентификатор сборки: 20120216-1857. Версия Android ist 2.2. Я делаю приложение для проверки соединения и разбора веб-сайта следующим образом:

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) {
    }
    }
}

Файл манифеста:

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>
            <action android:name="android.intent.action.MAIN" />

            <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

Как я могу устранить эту ошибку?

Ответы [ 8 ]

19 голосов
/ 30 марта 2012

С этой проблемой я столкнулся после недавнего обновления компонента ADT в Android. Похоже, что Android игнорирует путь сборки и вместо этого использует ANT по умолчанию.

Я решил эту проблему, удалив файл jar из пути сборки, создав папку в «корне» иерархии приложения (наряду с src, gen и т. Д.) С именем «libs» и поместив туда свой файл .jar. При очистке / сборке и повторном запуске приложения ошибка должна исчезнуть.

FYI - это происходит из-за того, что файл JAR не упаковывается в файлы .apk - вот почему он собирается правильно, но недоступен во время выполнения на вашем устройстве Android.

см. NoClassDefFoundError - Eclipse и Android

3 голосов
/ 30 марта 2012

Существует также проблема, заключающаяся в том, что jar-файлы должны находиться в каталоге libs (с 's'), а не в lib .... это может быть вашей проблемой?

2 голосов
/ 28 ноября 2013
  1. Щелкните правой кнопкой мыши имя проекта> Свойства> Путь сборки Java> вкладка Библиотеки, затем нажмите кнопку Добавить внешние банки.
  2. выберите путь jar из каталога, в который вы скачали jsoup-1.7.3.jar.
  3. После добавления jar перейдите на следующую вкладку Order and export и установите флажок jsoup-1.7.3.jar 4 нажмите ОК 5.чистите ваш проект и запустите.

Я решил ту же проблему, выполнив вышеуказанные шаги

2 голосов
/ 30 марта 2012

Вам не нужна строка:

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

в вашем файле манифеста. Все, что вам нужно сделать, чтобы использовать Jsoup, это убедиться, что он является частью вашего пути сборки, выполнив следующее:

  • Щелкните правой кнопкой мыши по своему проекту и выберите Свойства
  • Выберите Путь сборки Java и выберите Добавить внешние JAR-файлы ...
  • Перейдите к файлу Jsoup jar

Тогда Jsoup будет действовать как любая другая библиотека в Java. Например, в моем приложении я использую его так:

    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();
    }

Примечание. Я не включил в него весь свой код, потому что он довольно длинный. В любом случае, после этого вы просто импортируете классы по мере необходимости, например, в моем я использую следующее:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
1 голос
/ 31 января 2014

Я смог решить эту проблему следующим образом:

  1. Поместите jsoup jar в папку 'libs' (как отмечено в ответе Джона)
  2. Удалите «Зависимости Android» и «Частные библиотеки Android» из пути сборки
  3. Использование инструментов Android> Исправить свойства проекта для повторного заполнения указанных выше записей в пути сборки.
1 голос
/ 22 октября 2013

Вы делаете это неправильно. Вы не можете использовать функции Jsoup в действии Activity. Вам нужно сделать либо Async Task, либо thread.

Это предотвращает блокирование задач в вашей деятельности.

Вот хороший блог, который объясняет, как это сделать, а также предоставляет пример кода.

Пример кода Нажмите здесь

0 голосов
/ 19 июня 2013

Мое решение было

  1. Щелкните правой кнопкой мыши имя проекта> Свойства> Путь сборки Java> вкладка Библиотеки> удалите все, кроме «Android XX» (в моем случае 2.3.3) и «Зависимости Android» (по ссылке, найденной @KarlKarlsom > android.foxykeep.com <</a> из проблемы со стеком > стек <</a>)
  2. Я создал папку libs в моих основных проектах. Поскольку я использовал jsoup, я переместил его в эту папку
  3. Перезапущенное затмение, проект очистки не работает

p.s Я использовал jsoup и sherlock. Я не менял библиотеку Шерлока, только мой основной проект.

0 голосов
/ 12 июня 2012

Просто закройте Eclipse и откройте его снова.Проблема будет решена.

...