Ошибка библиотеки совместимости Android - PullRequest
6 голосов
/ 17 июля 2011

Кто-нибудь еще пробовал демонстрационное приложение для новой библиотеки совместимости на Android. Здесь

Я пытаюсь построить v4 на API 11, и я продолжаю получать эту ошибку, когда пытаюсь попробовать Support4Demo и нажимаю на вкладки и пейджер в демонстрационной версии фрагмента

e07-16 21: 32: 06,890: ОШИБКА / AndroidRuntime (15315): java.lang.NoClassDefFoundError: com.example.android.supportv4.app.LoaderCustomSupport $ AppListFragment 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в com.example.android.supportv4.app.FragmentTabs.onCreate (FragmentTabs.java:55) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1072) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1785) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:1842) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в android.app.ActivityThread.access $ 1500 (ActivityThread.java:132) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1038) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в android.os.Handler.dispatchMessage (Handler.java:99) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в android.os.Looper.loop (Looper.java:143) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в android.app.ActivityThread.main (ActivityThread.java:4263) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в java.lang.reflect.Method.invokeNative (родной метод) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в java.lang.reflect.Method.invoke (Method.java:507) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:839) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:597) 07-16 21: 32: 06.890: ОШИБКА / AndroidRuntime (15315): в dalvik.system.NativeStart.main (собственный метод)

Может ли кто-нибудь помочь мне в этом?

Ответы [ 2 ]

10 голосов
/ 20 июля 2011

Причина, по которой класс не может быть найден, заключается в том, что один из интерфейсов, которые реализует AppListFragment (OnQuerytextListener), определен в SearchView, который находится только в Honeycomb (API 11 +).

public static class AppListFragment extends ListFragment implements OnQueryTextListener, LoaderManager.LoaderCallbacks<List<AppEntry>>
{

Я искал в банке совместимости, но не могу найти ничего общего с SearchView, поэтому я предполагаю, что это будет работать только на Honeycomb и выше (и компиляция с целью ниже, чем Honeycomb действительно предотвращает эту работу.

Есть также несколько других сбоев по той же причине, например, Loader -> Throttle, затем нажмите menu - пропущенный метод.

Из пакета обеспечения совместимости страница

Предупреждение: убедитесь, что вы не путаете стандартные пакеты android с пакетами из библиотеки android.support. Некоторые инструменты завершения кода могут ошибаться, особенно если вы работаете с последними версиями платформы. Чтобы быть в безопасности, оставьте для вашей цели сборки ту же версию, которую вы определили для своего android: minSdkVersion, и дважды проверьте операторы импорта для классов, которые также существуют в библиотеке поддержки, например SimpleCursorAdapter

Следование их собственным советам означает, что весь проект не может быть скомпилирован - половина примеров классов, кажется, зависит от чего-то более высокого, чем API 4.

Мой ответ? Некоторые примеры плохие и полагаются на код, которого нет. Если повезет, Google скоро обновит их для работы.

О да, вы можете временно заставить его работать, удалив OnQueryTextListener и методы из AppListFragment, но позже произойдет сбой с другой проблемой.

6 голосов
/ 20 июля 2011

Я решил эту проблему, закомментировав правильные строки в FragmentTab.onCreate и FragmentTabPager.onCreate.

//mTabManager.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),
//        LoaderCustomSupport.AppListFragment.class, null);
...