#android #android-ndk
#Android #android-ndk
Вопрос:
Когда мое приложение запускается на устройствах Android 6.0 или ниже (Nexus 5, Galaxy 3 …), оно завершает работу в System.LoadLibrary («mylib»);
Он отлично работает с устройствами Android 7.0 (Nexus 5x, Nexus 9). Я использую последнюю версию Android Studio (2.2) и NDK.
Сообщение журнала cat
java.lang.Ошибка UnsatisfiedLinkError: ошибка dlopen: не удается найти символ «__aeabi_memcpy8», на который ссылается mylib.so .
Ниже приведена часть build.gradle.
compileSdkVersion 24
buildToolsVersion '24.0.2'
defaultConfig {
applicationId "myApp"
minSdkVersion 10
targetSdkVersion 24 // Whatever this is, it crashes(22, 19...).
ndk {
moduleName "mylib"
}
}
Ниже Application.mk
APP_ABI := armeabi armeabi-v7a x86
APP_PLATFORM := android-10 // Whatever this is, it crashes.
В чем проблема?
Даже если я закомментирую все memcpy в файлах .c, он выдает одно и то же сообщение об ошибке. Перед запуском я очищаю и перестраиваю проект.
Комментарии:
1. Учитывая, что он
__aeabi_memcpy8
работает на N (24), но не на M (23) или ниже, это, скорее всего, проблема его компиляции с android-24. При использовании ndk-сборки через gradle я ожидалAPP_PLATFORM
бы победы, но, похоже, ни это, ниtargetSdkVersion
используется. Если вы изменитеcompileSdkVersion
значение на 23, это сработает? Предполагая, что это исправляет, это ошибка. Если да, не могли бы вы его подать? tools.android.com/filing-bugs2. Нет. он по-прежнему вылетает, даже если я меняю compileSdkVersion на 23.
3. Хм. Показывает ли gradle подробный вывод для компиляции где-нибудь? Аргументы
--sysroot
или-L
будут указывать на$NDK/platforms/android-$VERSION
.4. Я не знаю, как его использовать. Как ни странно, он работает с виртуальными устройствами, но не с реальными устройствами.
5. По моему опыту, эмуляторы не отражают реальность, когда дело доходит до машинного кода.
Ответ №1:
Убедитесь, что под вашим ndk> платформами указана правильная форма в вашем Application.mk APP_PLATFORM=Android-x.