Как собрать OpenSSL для генерации libcrypto.a с Android NDK и Windows

Я создал приложение для Android, использующее собственный код.

Нужна библиотека libcrypto.a из OpenSSL, не помню, где скачал, но работает. Проблема в том, что версия библиотеки 1.0.0a, и я хочу обновить ее до последней (теперь v1.0.1e). Я загрузил https://github.com/android/platform_external_openssl и попытался скомпилировать его, но есть много ошибок при компиляции. Я не знаю, как создать библиотеку.

Или, возможно, файлы c и h (из http://www.openssl.org/source/) можно включить в мои файлы c & h и не использовать библиотеку?

Спасибо!


person JoniJnm    schedule 29.05.2013    source источник
comment
Я знаю, это не ответ на ваш вопрос, но вы можете использовать библиотеку spongycastle (rtyley.github.io/ spongycastle) в качестве альтернативы. Ему не нужен NDK, и он работает.   -  person Analizer    schedule 29.05.2013


Ответы (2)


Если вы не хотите компилировать библиотеки самостоятельно, я только что сделал это и загрузил на github.

Версия 1.0.2 (22 января 2015 г.) OpenSSL

Он включает статические и разделяемые библиотеки для Arm и x86, а также включает Android.mk и включаемые файлы.

https://github.com/emileb/OpenSSL-for-Android-Prebuilt

person Emile Belanger    schedule 29.01.2015
comment
Я пытаюсь создать статическую библиотеку openssl, но у меня есть проблемы. Не могли бы вы поделиться сценарием сборки, на который я могу обратиться, чтобы найти проблему? - person pree; 23.03.2016
comment
С 11 июля 2016 года Google play блокирует приложения со старой версией OpenSSL. Вы должны использовать OpenSSL 1.02f / 1.01r или выше. - person Libor B.; 14.07.2016

Используя последние источники OpenSSL, вы сможете использовать автономную цепочку инструментов из Android NDK и configure + make. Основные шаги:

  1. экспортировать TOOL_PREFIX, CC и SYSROOT, чтобы указать на соответствующие пути инструментальной цепочки
  2. Настроить
  3. сделать

Пара примеров:

ARMv5te:

CC="/path/to/arm-linux-androideabi-gcc -mtune=xscale -march=armv5te -msoft-float --sysroot=/ndk_path/platforms/android-9/arch-arm"
./Configure android no-asm

ARMv7:

CC="/path/to/arm-linux-androideabi-gcc -march=armv7-a -mfloat-abi=softfp --sysroot=/ndk_path/platforms/android-9/arch-arm"
./Configure android-armv7 no-asm
person NuSkooler    schedule 29.05.2013
comment
Привет спасибо. Но можно ли это сделать в Windows? Я создам виртуальную машину, чтобы попробовать ваш пример :) - person JoniJnm; 30.05.2013
comment
В настоящее время я не занимаюсь разработкой Android для Windows. Если вы можете выполнить требования для Configure и друзей (например, через Cygwin / UNIX, например env), все будет в порядке. - person NuSkooler; 30.05.2013
comment
С linux работает, спасибо. Но не с armv7, он выдает эту ошибку: cryptlib.c: 1: 0: error: valor erróneo (armv7-a) para -march = switch - person JoniJnm; 31.05.2013
comment
Вы используете автономный набор инструментов ARMv7a (он отличается от ARMv5)? Если я правильно помню (я не могу проверить сейчас), когда вы запускаете скрипт для создания цепочки инструментов, вы должны указать параметр для этого. - person NuSkooler; 31.05.2013
comment
JoniJnm - А можно ли это сделать в Windows? - Скрипт кросс-компиляции OpenSSL для Android, вероятно, можно запустить под MinGW. - person jww; 17.01.2014
comment
А что насчет x86? - person Toochka; 07.08.2017