Имам приложение с 2 родни библиотеки. Първият работи много по-бързо на ARMv7, така че имам версия както за ARMv7, така и за ARMv5. Втората работи еднакво и на двете платформи, така че е предоставена само библиотека ARMv5.
Папката на родната ми библиотека изглежда така:
/jniLibs/
|
+---armeabi/
| |
| +---libFirstLibrary.so
| +---libSecondLibrary.so
|
+---armeabi-v7a/
|
+---libFirstLibrary.so
Приложението работи добре на всички устройства и версии на Android в производство.
Когато го тествах на моя Nexus 5 с L-Preview (hammerhead-lpv79-preview-ac1d8a8e.tgz), получавам тази грешка:
java.lang.UnsatisfiedLinkError: Couldn't load SecondLibrary from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.package-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.package-1, /vendor/lib, /system/lib]]]: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:358)
at java.lang.System.loadLibrary(System.java:610)
Проблемът е, че въпреки факта, че Nexus 5 има CPU_ABI
зададено на armeabi-v7a
и CPU_ABI2
настроено на armeabi
, L-Preview използва само CPU_ABI
стойност и търси „SecondLibrary“ само в папката „armeabi-v7a“ и се срива, тъй като не е там.
Когато копирам файла .so също в папка "armeabi-v7a", всичко е наред, но APK е с 3,5 MB по-голям, което не ми харесва много.
Това просто грешка на Android L-Preview ли е или някаква „нова функция“?