FragmentActivity вызывает ClassNotFoundException - PullRequest
28 голосов
/ 29 марта 2012

Я только что использовал 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>

Ответы [ 8 ]

27 голосов
/ 01 апреля 2012

Оказывается, это проблема с Android SDK Tools r17. Ранее я использовал метод, приведенный в руководстве по адресу:

http://mobile.tutsplus.com/tutorials/android/android-compatibility-working-with-fragments/

Однако это больше не работает. Вместо этого все, что мне нужно было сделать, - это щелкнуть правой кнопкой мыши мой проект в Eclipse и выбрать «Инструменты Android» -> «Добавить библиотеку поддержки» ...

Это означает, что больше не нужно , чтобы перейти к пути сборки Java и нажать «Добавить внешние JAR-файлы ...»

Большое спасибо eMich за это решение: Проблема с JAR-файлом в ADT r17

11 голосов
/ 03 июня 2013

У меня была такая же проблема, и ни один из ответов, найденных мной в 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.

0 голосов
/ 11 июня 2016
  1. Удалите все, что связано с версией v7 или v4. Переместите свой проект Android, Alt + Enter, нажмите android, посмотрите lib: убедитесь, что ничего нет в v7 или v4 lib
  2. добавить v4 lib
  3. чистый проект
  4. запустить снова

enter image description here enter image description here enter image description here

если вы удалите v7, будет ошибка со стилями ... вы можете посмотреть это

enter image description here

0 голосов
/ 30 сентября 2015

Я также получил ту же проблему и решил ее следующим образом. Если по какой-либо причине вы ОТКЛЮЧИЛИСЬ для частных библиотек из пути сборки, просто добавьте jar Androidv-4 в путь сборки и включите (отметьте) его на вкладке «Порядок и экспорт»

0 голосов
/ 03 апреля 2014

Та же проблема была решена с помощью Doing Build path-> Configure Build path-> order and export-> Check Добавить частные библиотеки-> ok.

Затем очистите проект.

Готово, большая проблема решена.

0 голосов
/ 22 марта 2013

Я получил

 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 выше, поэтому убедитесь, что все импортированные классы поддерживаются, если вы получаете эту ошибку.

0 голосов
/ 29 марта 2012

выберите ваш проект в Package Explorer> щелкните по нему правой кнопкой мыши> Инструменты Android> Fix PRoject Properties а также Попробуй Project> Clean

Затем перезапустите.

0 голосов
/ 29 марта 2012

Полагаю, что активность фрагмента указана в манифесте правильно?Вот мой основной класс 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>
...