FragmentActivity вызывает ClassNotFoundException
Я только что использовал Android SDK Manager для обновления Android SDK Tools до версии 17 и Android Compatiblity до версии 7. Теперь программа, с которой я запускалась в течение многих лет, вылетает при запуске.
Усугубляя проблему, я создал новый пустой проект, добавил android-support-v4.jar в путь сборки и изменил Activity на FragmentActivity и все. Теперь он падает.
Сообщение об ошибке:
java.lang.ClassNotFoundException: com.example.test.TestActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.test-2.apk]
Код:
package com.example.test;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
public class TestActivity extends FragmentActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Все остальное, включая манифест, не изменяется от значений по умолчанию. Любая помощь очень ценится!
Изменить: манифест включен ниже:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="9" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".TestActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Ответы
Ответ 1
Оказывается, это проблема с Android SDK Tools r17. Ранее я использовал метод, приведенный в учебнике, по адресу:
http://mobile.tutsplus.com/tutorials/android/android-compatibility-working-with-fragments/
Однако это больше не работает. Вместо этого все, что мне нужно было сделать, это щелкнуть правой кнопкой мыши по моему проекту в Eclipse и выбрать "Инструменты Android" → Добавить библиотеку поддержки...
Выполнение этого означает, что больше не нужно переходить на путь сборки Java и нажать "Добавить внешние JAR..."
Большое спасибо eMich за это решение: Проблема с Jar файлом с ADT r17
Ответ 2
У меня была такая же проблема, и ни один из ответов, которые я нашел в stackoverflow, не решил мою проблему. После нескольких часов (нескольких) проб и ошибок я решил свою проблему, настроив путь сборки моего проекта. В Eclipse щелкните правой кнопкой мыши проект > Build Path
> Configure Build Path...
, на вкладке Order and Export
, отметьте Android Private Libraries
, нажмите OK
. После этого очистите проект и повторите попытку.
Я решил эту проблему, сравнив мой проект с другим (вновь созданным) проектом, который может работать как ожидалось. Я сравнивал каждую конфигурацию и AndroidManifest.xml из них.
Надеюсь, это вам тоже поможет:)
ОБНОВЛЕНИЕ Другое решение: используя ANT
Я нашел другой способ решить эту проблему: используя ANT. Мой друг столкнулся с той же проблемой, но исправление пути сборки не решило его проблемы. Я не знаю, было ли это потому, что мы используем другую версию IDE, другую версию ADT или другую операционную систему (я использую GNU/Linux). И затем я предложил ему использовать ANT, а не IDE.
Сначала настройте проект (создайте build.xml
), выполнив android update project -p <project-dir> -n <project-name>
для каждого проекта (включая проекты библиотеки). А затем из основного каталога проекта выполните ant debug
для сборки, ant installd
для установки и запустите приложение.
Странная вещь, как только он преуспел в этом пути, он даже может скомпилировать с помощью IDE снова, без ANT вообще.
Ответ 3
Я предполагаю, что активность фрагментов указана в манифесте правильно? Здесь мой основной класс FragmentActivity в манифесте:
<activity android:name=".Polling" android:label="@string/app_name"
android:windowSoftInputMode="stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Ответ 4
выберите проект в Проводнике пакетов > Щелкните правой кнопкой мыши > Инструменты Android > Исправить свойства PRoject
а также
Попробуйте Project > Clean
Затем запустите.
Ответ 5
Я получил
java.lang.NoClassDefFoundError: com.android.example.SupportFragment
at com.android.example.SupportFragmentActivity.onCreate()
в PopupMenu
SupportFragment extends SherlockFragment implements PopupMenu.OnMenuItemClickListener
...
@Override
public boolean onMenuItemClick(android.view.MenuItem item) {
return onOptionsItemSelected(item);
}
при попытке сделать приложение api 17 совместимым с api 8, единственным признаком была ошибка logcat выше, поэтому убедитесь, что все импортированные классы поддерживаются, если вы получили эту ошибку.
Ответ 6
Такая же проблема была решена с помощью Doing Build path- > Configure Build path- > order and export- > Check Добавить частные библиотеки- > ok.
Затем очистите проект.
Сделано решение большой проблемы.
Ответ 7
Я также получил ту же проблему и разрешил ее следующим образом.
Если по какой-то причине у вас есть UNCHECKED для частных библиотек из пути сборки, просто добавьте банку Androidv-4 в путь сборки и включите (проверьте) ее на вкладке "Заказ и экспорт"
Ответ 8
- Удалите что-нибудь lib о v7 или v4. Переместите свой Android-проект, Alt + Enter, нажмите android, посмотрите lib: убедитесь, что нет ничего о v7 или v4 lib
- добавить v4 lib
- чистый проект
- снова запустить
![введите описание изображения здесь]()
если вы удалите v7, будет ошибка со стилями... вы можете посмотреть это
![enter image description here]()