Перейти к содержанию
Fire Monkey от А до Я
  • 0

[DELPHI FMX Android] [6.0] Не удается загрузить SSL библиотеку


bossalex

Вопрос

Недавно компилил приложение на Delphi  FMX Android  при обращении  к серверу https при выполнении Get запроса от компонента TIdHttp запросил библиотеку "Could not load SSL library" используется протокол sslvTLSv1_2 в windows все пашет в андроид нет , накопал что можно подключить библиотеки  libssl.so и  libcrypto.so через  deployment .assets\internal , А вот как в коде дальше их использовать никто примерчик не выложил, хоть и обсуждали на интернет просторах 100 раз, те как прикрутить  к IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile. Если есть у кого код выложите пожалуйста? или скинте по email bossalex@ya.ru

IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method.sslvTLSv1_2;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode.sslmUnassigned;

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
В 13.11.2018 в 09:36, Равиль Зарипов (ZuBy) сказал:

Вообще не совсем понятно зачем делать отправку письма из приложения.

Я придерживаюсь мнения что захардкоренные места не нужно держать в приложении, при обновлении параметров smtp сервера вы никак не сможете починить быстро

самый простой способ это хостинг ну или текущий сайт компании, там реализовать отправку письма как предлагал @ENERGY

Sorry! Когда я задавал вопрос по поводу проблем с  ошибками 'Could not load SSL', у меня была такая ситуация. Есть смартфон, работающий  как система сбора экспериментальных данных от некоторых блютусных датчиков.  Данные собираются, визуализируются и пишутся в виде двоичных файлов в память смартфона  вполне успешно.  В принципе все  хорошо, но хочется оперативно отсылать данные таким образом, чтобы у пользователя был минимум манипуляций, у него бывают руки заняты.  Программа поначалу просто отправляла файлы как вложения e-mail. Но на первом же смартфоне с седьмым андроидом отказалась загружать SSL. Я и обратился сюда, взывая о помощи,как можно относительно быстро и  просто решить эту проблему.  Я не адепт Indy и не обязательно использовать именно его. Сайта компании нет и сервера компании тоже нет, так как нет никакой компании, есть отдельные пользователи и их смартфоны. Программа помогает людям в их жизни, пишется на общественных началах.  Лично мне это не представляется в принципе глупым. То что написал Zuby понятно и спасибо за это. Но не понятно, что делать с этим мне в конкретной ситуации.  Кстати мне не удалось перейти по ссылке от @Energy, чтобы посмотреть на его пример,так как ссылка не открылась. У меня появилась легкая печаль... 

.

 

Изменено пользователем Юрий Гусач
Ссылка на комментарий
  • 0
  • Модераторы
6 минут назад, Юрий Гусач сказал:

Sorry! Когда я задавал вопрос по поводу проблем с  ошибками 'Could not load SSL', у меня была такая ситуация. Есть смартфон, работающий  как система сбора экспериментальных данных от некоторых блютусных датчиков.  Данные собираются, визуализируются и пишутся в виде двоичных файлов в память смартфона  вполне успешно.  В принципе все  хорошо, но хочется оперативно отсылать данные таким образом, чтобы у пользователя был минимум манипуляций, у него бывают руки заняты.  Программа поначалу просто отправляла файлы как вложения e-mail. Но на первом же смартфоне с седьмым андроидом отказалась загружать SSL. Я и обратился сюда, взывая о помощи,как можно относительно быстро и  просто решить эту проблему.  Я не адепт Indy и не обязательно использовать именно его. Сайта компании нет и сервера компании тоже нет, так как нет никакой компании, есть отдельные пользователи и их смартфоны. Программа помогает людям в их жизни, пишется на общественных началах.  Лично мне это не представляется в принципе глупым. То что написал Zuby понятно и спасибо за это. Но не понятно, что делать с этим мне в конкретной ситуации.  Кстати мне не удалось перейти по ссылке от @Energy, чтобы посмотреть на его пример,так как ссылка не открылась. У меня появилась легкая печаль... 

.

 

Хм, тогда вариант ещё проще. Писать прям в телеграм, отправка сообщения  делается одной строкой, запрос через post метод на https протокол.

ну а там уже на сколько выдумки хватит

почитайте апи телеграмма, все очень просто

Ссылка на комментарий
  • 0
2 часа назад, Юрий Гусач сказал:

Sorry! Когда я задавал вопрос по поводу проблем с  ошибками 'Could not load SSL', у меня была такая ситуация. Есть смартфон, работающий  как система сбора экспериментальных данных от некоторых блютусных датчиков.  Данные собираются, визуализируются и пишутся в виде двоичных файлов в память смартфона  вполне успешно.  В принципе все  хорошо, но хочется оперативно отсылать данные таким образом, чтобы у пользователя был минимум манипуляций, у него бывают руки заняты.  Программа поначалу просто отправляла файлы как вложения e-mail. Но на первом же смартфоне с седьмым андроидом отказалась загружать SSL. Я и обратился сюда, взывая о помощи,как можно относительно быстро и  просто решить эту проблему.  Я не адепт Indy и не обязательно использовать именно его. Сайта компании нет и сервера компании тоже нет, так как нет никакой компании, есть отдельные пользователи и их смартфоны. Программа помогает людям в их жизни, пишется на общественных началах.  Лично мне это не представляется в принципе глупым. То что написал Zuby понятно и спасибо за это. Но не понятно, что делать с этим мне в конкретной ситуации.  Кстати мне не удалось перейти по ссылке от @Energy, чтобы посмотреть на его пример,так как ссылка не открылась. У меня появилась легкая печаль... 

.

 

НЕ отчаивайтесь, Вам просто надо найти нужную версию SSL файла. Тут была ссылка на файловый архив разработчиков Indy, качаете оттуда и все работает как часы.  Проверено.

Дать ссылку не могу, т.к. пишу в "полевых" условиях. Ничего под руками нет. Поищите тут на форуме по слову Indy.

Ссылка на комментарий
  • 0
3 часа назад, Юрий Гусач сказал:

 Кстати мне не удалось перейти по ссылке от @Energy, чтобы посмотреть на его пример,так как ссылка не открылась. У меня появилась легкая печаль... 

Вы про сообщение

Цитата

Я из программы вызываю https://mysite.com/sendemail.php  с post параметрами

Это же пример просто. Сам php файл дать не могу, т.к. он большой (логи и базы) и там часть закрытой информации. Информации по PHP очень много на стэке и др. сайта, вот прям почти на любой вопрос с готовыми примерами. А тем более "как отправить письмо из PHP" (лучше искать на английском) - тут вообще просто все разжевано по максимуму.

 

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0

Поддерживаю мнение Равиля - в вашем случае удобнее использовать отправку через мессенждеры (телеграм в частности) или соцсети (везде есть апи для этого дела).

Отослать емайл вы можете средствами самого андроида, не прибегая к низкоуровневой работе с smtp протоколом. К примеру вот так (код скопипастил, возможно требуется корректировка) :

procedure TForm1.CreateEmail(const Recipient, Subject, Content, Attachment: string);
var
  JRecipient: TJavaObjectArray<JString>;
  Intent: JIntent;
  Uri: Jnet_Uri;
  AttachmentFile: JFile;
begin
  JRecipient := TJavaObjectArray<JString>.Create(1);
  JRecipient.Items[0] := StringToJString(Recipient);

  Intent := TJIntent.Create;
  Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
  Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, JRecipient);
  Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(Subject));
  Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(Content));

  if Attachment <> '' then
  begin
    AttachmentFile := TJFile.JavaClass.init(StringToJString(Attachment));
    Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
    Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((Uri as ILocalObject).GetObjectID));
  end;

  Intent.setType(StringToJString('vnd.android.cursor.dir/email'));

  SharedActivity.startActivity(Intent);
end;

Так же вы можете использовать различные сетевые хранилища для сбора данных (ЯндексДиск и другие), их апи позволяет довольно просто это делать по http протоколу. Можно использовать Google Docs, и  подобное. Или бесплатный хостинг и на нем на php сделать систему сбора/хранения. Возможностей куча. Нынче проблема не как реализовать, а какой вариант реализации выбрать (сам постоянно мучаюсь этим вопросом в своих проектах)

Ссылка на комментарий
  • 0

С выходом 10.3.3 стал пробовать компилировать проект под Android x64. И стала появляться ошибка Could not load SSL library. Хотя если компилить под x32, то все работает нормально. Инстинктивно сообразил что библиотеки libcrypto.so и libssl.so которые деплоятся в assets\internal должны быть тоже x64 версии. Однако на сайте Indy (https://indy.fulgan.com/SSL/) последняя версия "OpenSSL 1.0.2g Android" но они положительного результата не дали. Брал версию 1.1.1 на gitHub, вроде как x64, но ошибка сохраняется. Может быть кто-то уже столкнулся с этой проблемой?

Ссылка на комментарий
  • 0

Возможно их надо класть в другую папку

Вы компилируйте в apk или в AAB?

Попробуйте оба варианта. И вообще - то разве не в папке lib\armeabi-v7a (для 32 бит) должны библиотеки находиться? Ну и соответственно в lib/arm64-v8a  64-битные.

Попробуйте их в эти папки деплоить!

 

Ссылка на комментарий
  • 0
9 часов назад, qz5 сказал:

Возможно их надо класть в другую папку

Вы компилируйте в apk или в AAB?

Попробуйте оба варианта. И вообще - то разве не в папке lib\armeabi-v7a (для 32 бит) должны библиотеки находиться? Ну и соответственно в lib/arm64-v8a  64-битные.

Попробуйте их в эти папки деплоить!

 

Дело в том что я пытаюсь делать точно также как проект работает в х32 варианте. Не совсем улавливаю логику того, что для варианта x64 надо деплоить в другие папки... Но попробую на всякий случай.

Ссылка на комментарий
  • 0
2 часа назад, Yarpda сказал:

для варианта x64 надо деплоить в другие папки

Давайте объясню почему Вы делали с 32-битным вариантом неправильно. Пусть всё и работало.

По стандарту Андроид динамические библиотеки в АПК могут быть разные для разных платформ. ARM7, ARM8, MIPS и т.д.

Чтобы устанавливать в систему только необходимые, их надо класть в папку для этой системы.

lib/arm64-v8a для 64-битных ARM

lib\armeabi-v7a для 32 бит

и т..д.

А уже система при установке APK сама из этих папок возьмет только нужные версии и пропустит ненужные.

А у Вас работало только потому что код на Делфи искал динамические библиотеки еще и в internals, но это неправильно. Особенно после того, что теперь Делфи поддерживает более одной платформы.

Ссылка на комментарий
  • 0

К сожалению не получилось. Попробовал засунуть в lib/arm64-v8/ разные версии библиотек, но никак не помогло.

>Вы компилируйте в apk или в AAB? 
Как APK. Как компилировать в AAB пока не знаю...

Чуть позже выложу простенький пример проекта с данной ошибкой, может быть так будет проще решить эту проблему.

P.S. обнаружил в папке C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\Android\lldb  файлы libcrypto-1_1.dll и libssl-1_1.dll. Поидее это что-то похожее, однако смущает что файлы режат в папке Android а файлы DLL. Аналогичный файлов SO к сожалению в комплекте не идет...

Изменено пользователем Yarpda
дополнено
Ссылка на комментарий
  • 0

Выкладываю проект где можно наглядно все это проверить. В случае компиляции под Android x32 все работает. В случае x64 - перестает. На 32 и 64 деплоятся разные библиотеки ssl из разных папок. Установка в режиме Debug.

Прошу помочь разобраться в проблеме. (Сам я предполагаю, что нужны какие-то специальные библиотеки ssl от INDY под х64, но их пока нет, и появятся ли неизвестно).

SSL x64 Android issue.rar

Изменено пользователем Yarpda
правки
Ссылка на комментарий
  • 0

Попробуйте задать вопрос автору инди на его форуме где он отвечает. Его ник rlebeau. По крайней мере вы получите ответ от автора инди и все станет на свои места. Правда писать надо на английском.

http://bcbj.org/forums/viewforum.php?f=10&sid=e022f859f55a36e1a172e415bf163bad

 

Ссылка на комментарий
  • 0
1 час назад, Ingalime сказал:

Попробуйте задать вопрос автору инди на его форуме где он отвечает. Его ник rlebeau. По крайней мере вы получите ответ от автора инди и все станет на свои места. Правда писать надо на английском.

http://bcbj.org/forums/viewforum.php?f=10&sid=e022f859f55a36e1a172e415bf163bad

 

Спасибо большое за наводку. Попробую поработать и  в этом направлении.

Ссылка на комментарий
  • 0
13 часов назад, Yarpda сказал:

обнаружил в папке C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\Android\lldb  файлы libcrypto-1_1.dll и libssl-1_1.dll

посмотрите двоичный код

файлы начинаются на буквы MZ или ELF?

Ссылка на комментарий
  • 0
11 часов назад, Yarpda сказал:

Выкладываю проект где можно наглядно все это проверить. В случае компиляции под Android x32 все работает. В случае x64 - перестает. На 32 и 64 деплоятся разные библиотеки ssl из разных папок. Установка в режиме Debug.

Прошу помочь разобраться в проблеме. (Сам я предполагаю, что нужны какие-то специальные библиотеки ssl от INDY под х64, но их пока нет, и появятся ли неизвестно).

SSL x64 Android issue.rar 1 \u041c\u0411 · 3 downloads

В примере у вас получение данных по HTTPS. В рабочем проекте тоже самое? Может тогда не мучатся с Indy и его сторонними библиотеками, а использовать родной механизм андроида - THTTPClient?  

Ссылка на комментарий
  • 0
8 часов назад, Евгений Корепов сказал:

В примере у вас получение данных по HTTPS. В рабочем проекте тоже самое? Может тогда не мучатся с Indy и его сторонними библиотеками, а использовать родной механизм андроида - THTTPClient?  

Да. нужно получение данных по HTTPS (иначе не пришлось бы возиться с SLL и проблемы бы не было как таковой). У меня в стандартном наборе нет компонента "THTTPClient" . Есть "TNETHTTPClient". Но судя по первому взгляду методы и свойства там схожие, попробую и этот вариант. Спасибо за наводку!

Ссылка на комментарий
  • 0
2 часа назад, Yarpda сказал:

Да. нужно получение данных по HTTPS (иначе не пришлось бы возиться с SLL и проблемы бы не было как таковой). У меня в стандартном наборе нет компонента "THTTPClient" . Есть "TNETHTTPClient". Но судя по первому взгляду методы и свойства там схожие, попробую и этот вариант. Спасибо за наводку!

Вам не нужен TNETHTTPClient, это всего лишь обертка для THTTPClient. Просто сделайте поиск по данному форуму по "THTTPClient" и вам откроется многое.

Ссылка на комментарий
  • 0
9 часов назад, Евгений Корепов сказал:

Вам не нужен TNETHTTPClient, это всего лишь обертка для THTTPClient. Просто сделайте поиск по данному форуму по "THTTPClient" и вам откроется многое.

Спасибо! Действительно многое открылось. )) ThttpClient  заработал как и хотелось  и без танцев с бубном над библиотеками SSL.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...