не удается найти символ «EVP_cast5_cbc» на Android - PullRequest
0 голосов
/ 06 ноября 2019

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

У кого-нибудь есть идея?

Спасибо заранее.

1 Ответ

0 голосов
/ 06 ноября 2019

Google изменил использование частных библиотек для Marshmallow и выше;это может быть случай, который вы испытываете.

Начиная с Android 6.0, система предотвращает динамическое связывание приложений с библиотеками, отличными от NDK, что может привести к сбою приложения.

Согласноэта таблица: https://developer.android.com/about/versions/nougat/android-7.0-changes.html#ndk. Вы должны видеть предупреждения logcat, когда вы запускаете Lollipop с закрытыми библиотеками. Например:

03-21 17:07:51.502 31234 31234 W linker  : library "libandroid_runtime.so"
("/system/lib/libandroid_runtime.so") needed or dlopened by
"/data/app/com.popular-app.android-2/lib/arm/libapplib.so" is not accessible
for the namespace "classloader-namespace" - the access is temporarily granted
as a workaround for http://b/26394120
...