Включая OpenSSL 1.1.0 .so в Android .aar - PullRequest
0 голосов
/ 08 мая 2018

Основной вопрос:

Есть ли способ для процесса сборки Android aar включить libssl.so.1.1?

Справочная информация:

Я строю .aar с openssl 1.1.0. Выводы openssl общего объекта - это 'libssl.so.1.1' и 'libssl.so' (плюс libcrypto, но я пока исключу это)

При создании .aar с общим объектом сборка библиотеки Android завершается успешно, но отсутствует общий объект, заканчивающийся на «.so.1.1». Однако он включает в себя другие общие объекты, которые явно заканчиваются на «.so»

Я предполагаю, что задача android aar gradle выполняет тщательную проверку файлов, заканчивающихся на «.so».

Глядя в каталог сборки Android, я вижу, что 'промежуточные элементы -> jniLibs -> release' содержат ВСЕ .so, включая * .so.1.1. Однако, глядя в 'промежуточные -> library_and_local_jars_jni -> release', он пропускает файлы .so.1.1.

Дополнительная информация:

  • Я вручную компилирую OpenSSL, а затем помещаю файлы .so в проект библиотеки Android aar. (Я проверял, что они правильные, загружая их прямо в apk)
  • Похоже, что OpenSSL в настоящее время не поддерживает более новые NDK, поэтому я использую NDK 13.
  • Проект библиотеки Android нацелен на Android SDK 27 с минимальным значением 21
  • Проект библиотеки Android - это , включая .so, только не тот, который заканчивается на .so.1.1
  • общие объектные файлы собираются в соответствующие директории архитектуры, такие как 'arm64-v8a'

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 09 мая 2018

Мне удалось найти точную проблему в трекере ошибок GitHub openssl https://github.com/openssl/openssl/issues/3902

С OpenSSL 1.1.0 изменить Configurations/10-main.conf со следующим

в обоих разделах "android64" => { и "android" => { вы должны добавить shared_extension => ".so", примерно так (убедитесь, что оно ниже inherit_from),

"android64" => {
    inherit_from     => [ "linux-generic64" ],
    shared_extension => ".so",
    cflags           => add(picker(default => "-mandroid -fPIC --sysroot=\$(CROSS_SYSROOT) -Wa,--noexecstack")),
    bin_cflags       => "-pie",
},

В более новых версиях OpenSSL (ex. 1.1.1) используется следующее

make SHLIB_VERSION_NUMBER= SHLIB_EXT=.so

...