Я недавно собрал 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, но я столкнулся с той же проблемой.
У кого-нибудь есть идея?
Спасибо заранее.