У меня есть приложение с двумя собственными библиотеками. 1-й работает намного быстрее на 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 МБ больше, что мне не очень нравится.
Это просто ошибка Android L-Preview или какая-то «новая функция»?