Я пытался собрать 64-битный (arm64) Openssl v1.1.1b и добавить его в свое приложение как разделяемую библиотеку (libcrypto.so и libssl.so).
Я создал автономный набор инструментов с аргументами --arch arm64 и --api 21, затем собрал с ним библиотеки openssl и добавил их в свое приложение.
Все 64-битные устройства с Android 6.x и выше прекрасно работают, но я застрял на Android 5.0.1 64-битной - планшет Lenovo TAB 2 A10-70L.
Проблема в том, что на этом конкретном Android при загрузке libssl.so я получаю сообщение об ошибке:
E/art ( 2755): dlopen("/data/app/com.myapp.mypackage-1/lib/arm64/libssl.so", RTLD_LAZY) failed:
dlopen failed: cannot locate symbol "EVP_camellia_128_cbc" referenced by "/data/app/com.myapp.mypackage-1/lib/arm64/libssl.so"...
E/MY_APP( 2755): 2019-06-12 14:22:27,984: [MY_APP][18446744071776944368] ERROR (2117) - Error in loading libraries :
dlopen failed: cannot locate symbol "EVP_camellia_128_cbc" referenced by "/data/app/com.myapp.mypackage-1/lib/arm64/libssl.so"...
Таким образом, будет сгенерировано исключение -> загрузка других библиотек после того, как libssl.so не будет выполнена, и приложение завершит работу во время или после заставки.
Я обнаружил в StackOverflow, что это может быть вызвано, если вы компилируете нативную библиотеку (как openssl) для более ранней версии Android, тогда используемый планшет ... Но я делаю openssl с api 21, это Android 5.0, так что не стоит это не проблема. Похоже, что openssl ожидает этот символ в библиотеках устройства, а у этого устройства его нет.
Что я пробовал:
- Чтобы использовать разные NDK для сборки openssl -> Я использовал 15-19 NDK,
с этой версией я создал приложение, но произошла та же ошибка (с
«Не могу найти символ»). Я пытался 12-14 ндк, чтобы быть ближе к ндк мы
мы используем в нашем приложении для других родных библиотек (то есть 12b), но с
этот NDK я вообще не умею делать openssl libs, он потерпит неудачу
во время сборки.
- Чтобы использовать разные NDK для создания всего приложения -> Я
пробовал 16 и 19, но в сборке были сбои и я не
думаю, это поможет.
- Чтобы использовать 21 как minsdkversion в
AndroidManifests, свойства проекта и файлы build.gradle, чтобы иметь
все в той же версии API, но безуспешно.
- Я пытался собрать и реализовать более высокую версию openssl - 1.1.1c - но
Произошла такая же ошибка с Камелией.
- Я пытался добавить, что отсутствует
символ в качестве макроса для evp.h, но безуспешно (возможно, я должен добавить
это по-другому).
- Я пытался исключить шифр камелии из
сборка openssl путем редактирования make-файла, но вся сборка закончилась
Ошибка
Почему это может происходить, и как я могу это исправить, чтобы запустить мое приложение на Android 5.x 64bit?