Почему isroid.util.LruCache. * Не найден при использовании android-support-v4?

Я пишу проект, который использует LruCache, который включен в библиотеку совместимости android-support-v4.jar. При работе на устройствах с JB код работает нормально, но когда я запускаю его на своем Droid X с GB, приложение умирает со следующими ошибками:

I/dalvikvm(2459): Could not find method android.util.LruCache.put, referenced from method blah.blah.Utility.getBitmap W/dalvikvm(2459): VFY: unable to resolve virtual method 2641: Landroid/util/LruCache;.put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; D/dalvikvm(2459): VFY: replacing opcode 0x6e at 0x0026 ... [repeats similar lines] ... W/dalvikvm(2459): Unable to resolve superclass of Lblah/blah/Utility$1; (353) W/dalvikvm(2459): Link of class 'Lblah/blah/Utility$1;' failed E/dalvikvm(2459): Could not find class 'blah.blah.Utility$1', referenced from method blah.blah.Utility.initCaches W/dalvikvm(2459): VFY: unable to resolve new-instance 559 (Lblah/blah/Utility$1;) in Lblah/blah/Utility; D/dalvikvm(2459): VFY: replacing opcode 0x22 at 0x000d D/dalvikvm(2459): VFY: dead code 0x000f-002c in Lblah/blah/Utility;.initCaches (ILandroid/content/Context;)V I/dalvikvm(2459): Could not find method android.util.LruCache.get, referenced from method blah.blah.Utility.mCacheGet W/dalvikvm(2459): VFY: unable to resolve virtual method 2640: Landroid/util/LruCache;.get (Ljava/lang/Object;)Ljava/lang/Object; D/dalvikvm(2459): VFY: replacing opcode 0x6e at 0x0008 D/dalvikvm(2459): VFY: dead code 0x000b-000e in Lblah/blah/Utility;.mCacheGet (Ljava/lang/String;)Landroid/graphics/Bitmap; ... [repeats similar lines] ... D/AndroidRuntime(2459): Shutting down VM W/dalvikvm(2459): threadid=1: thread exiting with uncaught exception (group=0x40018560) E/AndroidRuntime(2459): FATAL EXCEPTION: main E/AndroidRuntime(2459): java.lang.NoClassDefFoundError: blah.blah.Utility$1 E/AndroidRuntime(2459): at blah.blah.Utility.initCaches(Utility.java:49) E/AndroidRuntime(2459): at blah.blah.MainActivity.onCreate(MainActivity.java:40) ... [etc] ... W/ActivityManager(1318): Force finishing activity blah.blah/.MainActivity 

Utility.java:49 выглядит так:

  mCache = new LruCache<String, Bitmap>( mCacheSize ) // <-- line 49 -- { @Override protected int sizeOf( String key, Bitmap bitmap ) { return bitmap.getByteCount(); } }; 

Поэтому везде, где я ссылался на LruCache, его методы приводят к ошибке. Первое, что приходит на ум, это то, что андроид-support-v4.jar был каким-то образом оставлен из файла APK, но это не похоже на случай. Я поместил файл jar под libs / и проверил classes.dex.d после запуска ant debug, я вижу, что он добавил следующую строку:

 /home/paul/workspace/blah/libs/android-support-v4.jar \ 

Моя вторая мысль заключалась в том, что, возможно, LruCache не поддерживает android-support-v4, но, глядя на источник, я вижу, что здесь есть следующий исходный файл и что у него есть методы, которые я пытаюсь использовать:

 /home/paul/bin/android-sdk/extras/android/support/v4/src/java/android/support/v4/util/LruCache.java 

Так почему он не найден?

Классы в библиотеке поддержки используют другое пространство имен.

Вам необходимо импортировать:

 import android.support.v4.util.LruCache; 

Или же вы можете скопировать и скомпилировать LruCache.java прямо в ваше приложение.