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>
 edthethird29 мар. 2012 г., 21:26
Вы можете опубликовать свой манифест? Эта ошибка почти всегда является проблемой в манифесте

Ответы на вопрос(8)

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

Затем повторите.

 GarrickW01 июл. 2013 г., 22:41
Что бы это ни стоило, я сначала попробовал все другие решения, опубликованные в этой теме, но только когда я попробовал Project> Clean, приложение снова запустилось.
 Dave29 мар. 2012 г., 20:36
Спасибо за идею, но она не сработала. Я попытался удалить и переустановить пакет совместимости, но это не имело никакого значения.
Решение Вопроса

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

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

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

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

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

 DevZer028 мая 2013 г., 06:03
добавление библиотеки поддержки через Android Tools все еще приводит к сбою моего кода, виновник, как я определил, v4.FragmentActivity
 Knickedi02 мая 2012 г., 16:07
Просто пытаться начать с фрагментами ... это сэкономило мне время. Приятно быть информированным об этой проблеме. Благодарю.
 h4lc0n04 июн. 2013 г., 16:07
Спасибо, хотя кроме этого мне пришлось перейти к свойствам проекта, пути сборки Java и выбрать «Частные библиотеки Android» в «Заказ и экспорт», чтобы он работал
 IgorGanapolsky09 мая 2012 г., 20:37
Я не понимаю, почему вам больше не нужно добавлять внешние библиотеки совместимости jar.
 Nilzor08 мая 2013 г., 14:47
@ igor-ganapolsky Я думаю, что Eclipse сделает это за вас, когда вы нажмете кнопку «добавить библиотеку поддержки». Он фактически копирует файл .jar в папку / libs, в результате чего он развертывается вместе с приложением. Однако я задам вопрос: почему старый метод больше не работает?

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

Удалите что-нибудь lib о v7 или v4. Переместите свой проект Android, нажмите Alt + Enter, нажмите android, посмотрите lib: убедитесь, что ничего нет в v7 или v4 libдобавить v4 libчистый проектбеги снова

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

и ни один из ответов, найденных мной в 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 вообще.

 Jackson18 июн. 2013 г., 11:43
Точно то же самое случилось со мной, это действительно правильный ответ.
 JulianSymes17 июн. 2013 г., 15:51
Upvoted. Нашел один и тот же ответ самостоятельно (а также после нескольких часов экспериментов). Неприятный момент, когда приложение, которое работало месяцами, неожиданно начинает зависать при запуске, после обновления инструментов разработки. Принадлежит к списку ошибок Android.
 opc0de11 июл. 2013 г., 11:12
В течение 3 дней я пытался найти решение. Большое спасибо! : D

что активность фрагмента указана в манифесте правильно? Вот мой основной класс 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>
 Davek80429 мар. 2012 г., 20:53
Да, здесь софтпоинт не имеет никакого отношения, и я мог бы просто изменить название действия для вас, я полагаю. Хм ... вы пробовали использовать пакет совместимости 16, а не 4?
 Dave30 мар. 2012 г., 22:16
Спасибо за помощь, я действительно ценю это. Я создал новый проект и поместил в библиотеку v13, но это не имело никакого значения. Я также попытался удалить / переустановить весь мой Android SDK, также без разницы. Я собираюсь продолжать немного больше сегодня вечером, и если я не могу заставить это работать, я рассматриваю переустановку Eclipse. Из-за отсутствия полезных результатов после нескольких поисков в Google я полагаю, что это связано с тем, как я настроил, а не с Eclipse / Android.
 Dave29 мар. 2012 г., 20:37
Да, мой выглядит точно так же, как ваш, за исключением того, что имя - ".TestActivity", а у меня нет функции SoftInputMode.
 Davek80430 мар. 2012 г., 20:48
@Dave: Я предлагаю вам просто сделать новый пакет, добавив библиотеки v16 вместо v4, чтобы посмотреть, что делать. Каталог для jar: \ android-sdks \ extras \ android \ support \ v13. Просто добавьте его так же, как вы бы v4. Если вы загрузите его правильно и ваш новый проект будет работать нормально, вы сможете внести соответствующие изменения в ваш реальный проект. Если вам нужна помощь в изменении / удалении / добавлении, просто дайте мне знать, и мы сможем запустить потоковый чат StackOver, чтобы разобраться в нём.
 Dave30 мар. 2012 г., 20:11
Откат к предыдущей версии пакета совместимости был бы идеальным вариантом. Есть ли способ получить предыдущую ревизию? Я не вижу никакой возможности сделать это.

Я получил

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

Configure Build path-> order and export-> Check Добавить частные библиотеки-> ok.

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

Сделано, большая проблема решена.

Ваш ответ на вопрос