• 0
Kitty

Failed to load libssl.so

Вопрос

Приложение имеет возможность отправлять письма. Протокол OpenSSL Indy. Для этого используются библиотечные файлы libcrypto.so и libssl.so
Файлы добавлены в деплоймент и указан путь, где они лежат.

#include <System.StartupCopy.hpp>
#include <IdSSLOpenSSLHeaders.hpp>

__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
  IdOpenSSLSetLibPath(System::Ioutils::TPath::GetDocumentsPath());
}

//нажатие на кнопку
try
      {
//код***********************


		  IdSMTP1->Connect();
		  try {
			 IdSMTP1->Send(IdMessage1);
		  }
		  __finally {
			 IdSMTP1->Disconnect();
		  }

		  ShowMessage(L"Письмо отправлено.");
	   }
	   catch (const EIdOSSLCouldNotLoadSSLLibrary &)
		  {
//для планшета Samsung GT-P5200		   
String ErMessage = WhichFailedToLoad();
		   String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), L"error.ini");
		   if(FileExists(path))
			 {
              std::unique_ptr<TIniFile> FileINI(new TIniFile(path));
			  FileINI->WriteString(L"ERROR",L"error",ErMessage);
              ShowMessage(L"Ошибка записана в файл error.ini");
             }
		   else
			   {
				ShowMessage(L"Не найден файл error.ini");
               }

		  }
       catch (const Exception &E)
		  {
           String MES = L"Ошибка отправки. Проверти интернет. " + E.Message;
		   ShowMessage(MES);
		  }

APK инсталлирован на телефоны и пару планшетов. Отправка писем исправно работает. Но есть один планшет Samsung GT-P5200, который не может загрузить библиотечный файл, и получаю на нем ошибку:
[ERROR]
error="Failed to load /data/data/com.embarcadero.Mikros/files/libssl.so."

Чтобы убедиться, что дело не в деплойменте делаю новые шаги:
1. Убираю файлі  libcrypto.so and libssl.so из деплоймент менеджера.
2. Вручную копирую эти два файла libcrypto.so и libssl.so  на два планшета в их папки Download.
3. Изменяю код, чтобы была указана папка Download:
IdOpenSSLSetLibPath(System::Ioutils::TPath::GetSharedDownloadsPath());
4. Инсталлирую полученный  APK на планшеты PIPO M7 pro андроид 4.4.2  и Samsung GT-P5200 андроид 4.4.2.
5. Посылаю Indy email из приложения.

На PIPO M7 pro все работает как надо.

На Samsung GT-P5200 снова ошибка загрузки:
[ERROR]
error="Failed to load /storage/emulated/0/Download/libssl.so."

Таким образом планшет  Samsung GT-P5200 андроид 4.4.2 никак не может загрузить libssl.so :(
Что можете посоветовать?
Спасибо.


P.S. Ответ разработчика Indy не дает подсказки, а что же сделать чтобы заработало:

My guess, and this is just a guess, is that the .so file itself is probably not compatible with that tablet and/or OS version. Or maybe it is linked to a dependent .so file that it cannot find.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

39 ответов на этот вопрос

  • 0
12 минут назад, Kitty сказал:

Нет, на интел планшете не хочет отправлять письма. :(

Что по этому поводу говорит Remy Lebeau?

Временно имеется планшет с Intel Atom (Androd 5.1.1). Можете прислать тестовую программу, проверю.

Изменено пользователем Rusland
Равиль Зарипов (ZuBy) понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

печалька :(

ошибка та же? если сборке не указать APP_ABI := x86 собирается четыре папки: arm64-v8a, mips64, x86 и x86-64

arm и x86-64 вот libs.zip

попробовать библиотеки 86-64 и для чистоты эксперимента arm из этой сборки, mips думаю не нужен

Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

теперь кстати можно определить запущено приложение на интеле или нет

Kitty и Pax Beach понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
20 часов назад, Камышев Александр сказал:

печалька :(

ошибка та же? если сборке не указать APP_ABI := x86 собирается четыре папки: arm64-v8a, mips64, x86 и x86-64

arm и x86-64 вот libs.zip

попробовать библиотеки 86-64 и для чистоты эксперимента arm из этой сборки, mips думаю не нужен

Мне попался другой планшет от других людей и тоже марка GT-P5200. Попробовала на нем разные версии *.so файлов. При всех разных версиях этих файлов, в ini получаю странную и не информативную ошибку:

[ERROR]
error="F

Что значит буква F без закрывающих кавычек не понятно...

Видимо начало предложения Failed to load...

 

Изменено пользователем Kitty

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

А как еще можно организовать отправку письма если это galaxy tab, если инди с этим не справляется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
13 минут назад, Kitty сказал:

А как еще можно организовать отправку письма если это galaxy tab, если инди с этим не справляется?

Может быть так? (правда код на Delphi)

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
В 29.09.2016 в 10:56, Kitty сказал:

Мне попался другой планшет от других людей и тоже марка GT-P5200. Попробовала на нем разные версии *.so файлов. При всех разных версиях этих файлов, в ini получаю странную и не информативную ошибку:

[ERROR]
error="F

Что значит буква F без закрывающих кавычек не понятно...

Видимо начало предложения Failed to load...

 

Проверил. Да, действительно обрезается текст (не понял почему). Чтобы это не происходило, добавьте текста в Error.ini:

Цитата

[ERROR]

error=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789

тогда ошибка будет видна полностью.

Пробовал разные версии libcrypto.so и libssl.so (из этой темы в частности). Всегда выдает либо "Failed to load /data/data/com.embarcadero.Mikro/files/libssl.so.", либо "Failed to load /data/data/com.embarcadero.Mikro/files/libcrypto.so.". Думаю, надо искать нужную версию библиотек под intel

Изменено пользователем Rusland
Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Если у вас аппарат рутован, то вы можете достать с него библиотеки libcrypto.so и libssl.so - они находятся в system/lib (или system/lib64). У меня root-а нет, поэтому я не могу их вытащить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Удалось вытащить библиотеки, передав их через Bluetooth.

Проверил с ними - выходит ошибка: "Failed to load /data/data/com.embarcadero.Mikro/files/libcrypto.so."

Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Через интенты не удалось отправить письмо c вложением:

#include <FMX.Helpers.Android.hpp>

void __fastcall TFormServis::Button3Click(TObject *Sender)
{
 Button3->Enabled = false;
 Application->ProcessMessages();

   _di_JIntent intent;
   //intent = new TJIntent; // <-- erorr no viable overloaded '='
   intent = TJIntent::JavaClass->init();
   intent->setAction(TJIntent::JavaClass->ACTION_SENDTO);
   intent->setData(StrToJURI(L"mailto:" + String("lenailicheva@yandex.ru")));
   // or: intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_SENDTO, StrToJURI(L"mailto:" + address));
   intent->setFlags(TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK);
   intent->putExtra(TJIntent::JavaClass->EXTRA_SUBJECT, StringToJString(L"Тест"));
   intent->setType(StringToJString(L"message/rfc822"));

   String path =
   System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), L"mikros.s3db");

   if(FileExists(path))
   {
    _di_JFile AttachmentFile = TJFile::JavaClass->init(StringToJString(path));
    _di_Jnet_Uri Uri = TJnet_Uri::JavaClass->fromFile(AttachmentFile);
    intent->putExtra(TJIntent::JavaClass->EXTRA_STREAM, TJParcelable::Wrap(((_di_ILocalObject)Uri)->GetObjectID()));
   }

   SharedActivity()->startActivity(intent);
   Button3->Enabled = true;
}

ERROR:

android.content.ActivityNotFoundExcrption: No Activity found to handle Intent
{act=abdroid.intent.action.SendTO typ=message/rfc822 flg=0x10000000(has extras)}.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Кто из нибудь из гуру может отправить письмо с вложением через интент? Спасибо.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

А без вложения все нормально?

Может быть надо 

intent->setType(StringToJString(L"vnd.android.cursor.dir/email"));

как указано здесь?

Изменено пользователем Rusland
Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Владельцам galaxy tab нужно не письма отправлять, а огнестойкую коробку и перчатки, что бы сложить его туда и забетонировать от греха подальше :D

сори оффтоп

Изменено пользователем Камышев Александр

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу