Недавно я создал libssh2 для Android, используя OpenSSL в качестве криптобэкенда, а также сам создал libcrypto.so и libssl.so, используя NDK. В процессе сборки я создаю окончательный libcustom.so, связанный с libssh2.a.
Google сказал: «Если вы пытались использовать свою собственную копию OpenSSL, но забыли связать ее с APK вашего приложения, приложение может нормально работать на версиях платформы Android, которые включают libcrypto.so. Однако приложение может аварийно завершать работу на более поздних версиях Android. которые не включают эту библиотеку (например, Android 6.0 и более поздние версии)». вот почему я упаковываю libcrypto.so, libssl.so и libcustom.so в свой APK.
При запуске приложения Android, которое загружает libcustom.so, мое приложение аварийно завершает работу со следующей ошибкой: сбой: ошибка dlopen: не удается найти символ "EVP_cast5_cbc", на который ссылается "libcustom.so"... ТОЛЬКО НА ANDROID 5. Он хорошо работает на Android 6 и выше.
Символ EVP_cast5_cbc не определен, но упоминается в libssh2.a, но хорошо определен в libcrypto.so.
Я не понимаю, почему он работает правильно на Android 6 и выше, а не на Android 5.
Я думал, что в Android 5 используется не тот libcrypto.so, который я встроил в APK, а тот, который находится в /system/lib ; поэтому я попытался переименовать libcrypto.so и собрать libssh2.a, используя переименованный libcrypto, но столкнулся с той же проблемой.
У кого-нибудь есть идея?
Заранее спасибо.