Пример пакета совместимости с Android FragmentTabsPager аварийно завершает работу - PullRequest
0 голосов
/ 17 ноября 2011

Я попробовал пример, поставляемый с пакетом совместимости с Android. FragmentTabsPager вылетает со следующей ошибкой:

11-17 19:00:27.414: E/AndroidRuntime(5401): FATAL EXCEPTION: main
11-17 19:00:27.414: E/AndroidRuntime(5401): java.lang.NoClassDefFoundError: com.example.android.supportv4.app.LoaderCustomSupport$AppListFragment
11-17 19:00:27.414: E/AndroidRuntime(5401):     at com.example.android.supportv4.app.FragmentTabsPager.onCreate(FragmentTabsPager.java:60)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2633)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2685)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.access$2300(ActivityThread.java:126)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2038)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.os.Looper.loop(Looper.java:123)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at android.app.ActivityThread.main(ActivityThread.java:4633)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at java.lang.reflect.Method.invokeNative(Native Method)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at java.lang.reflect.Method.invoke(Method.java:521)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-17 19:00:27.414: E/AndroidRuntime(5401):     at dalvik.system.NativeStart.main(Native Method)

Как мне это исправить?

Спасибо.

UPD Просто хочу знать, почему кто-то голосует за закрытие? Я прогуглил это и нашел открытую проблему здесь. Ответа пока нет. Я думаю, что мой вопрос заслуживает внимания и заслуживает внимания.

1 Ответ

8 голосов
/ 20 ноября 2011

В чем здесь проблема?
Вы получаете NoClassDefFoundError.Когда это происходит:

Определение класса для поиска существовало, когда был скомпилирован текущий исполняемый класс, но определение больше не может быть найдено.

из документации oracle

Ваш класс или его части были доступны во время компиляции, но больше не доступны во время выполнения.Это происходит, когда ваш проект Android настроен на определенный целевой уровень API и вы используете его доступные классы и методы.Затем вы запускаете этот проект на устройстве с более низкой версией Android (при условии, что ваш minSdk настроен на это в вашем AndroidManifest - по умолчанию 4 для этого примера проекта) .Неожиданно некоторые из этих компонентов могут быть недоступны¹.Вы получите эту ошибку.

Как это исправить?
Измените целевой проект SDK на версию, которую вы хотите поддерживать.Когда вы это сделаете, вы должны увидеть маркеры ошибок и проблемы с компиляцией в своем инструменте по вашему выбору, например, eclipse.Если вы установите его на 2,2.например, вы увидите, что этот класс использует OnQueryTextListener, SearchView и ArrayAdapter.addAll() (все они представлены в API 11).Они недоступны на устройстве с уровнем API 10 или ниже.Создание обходного пути для этой функции должно решить проблему.В любом случае, учитывая, что это пример кода, следует помнить, что эти методы недоступны.

TL; DR:
В примере проекта используются функции API уровня11, которых нет в пакете совместимости.При выполнении на устройстве с версией ниже 11 эта ошибка выдается.

¹ В этом случае интерфейс OnQueryTextListener

...