How to build OpenSSL to generate libcrypto.a with Android NDK and Windows
Asked Answered
S

2

5

I created an application for android which uses native code.

It needs the libcrypto.a library from OpenSSL, I don't remember where I downloaded it, but it works. The problem is that the version of the lib is 1.0.0a and I want to update to the latest (now v1.0.1e). I downloaded https://github.com/android/platform_external_openssl and tried to compile it, but there are a lot of errors while compiling. I don't know how to generate the lib.

Or maybe the c and h files (from http://www.openssl.org/source/) can be included in my c&h files and not use the lib?

Thanks!

Sherlynsherm answered 29/5, 2013 at 9:23 Comment(1)
I know, this is not an answer to your question, but you could use spongycastle library (rtyley.github.io/spongycastle) as an alternative. It does not need NDK and it works.Marijane
C
12

If you don't want to compile the libs yourself I have just done this and uploaded to github.

Version 1.0.2 (22 Jan 2015) of OpenSSL

It includes static and shared libraries for Arm and x86, also include Android.mk and include files.

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

Cerebrospinal answered 29/1, 2015 at 17:21 Comment(2)
I'm trying to build openssl static lib myself but having some issues. Would you be able to share the build script which I can refer to find the issue?Dielu
From July 11, 2016 Google play blocks application with older version of OpenSSL. You must use OpenSSL 1.02f/1.01r or higher.Pvc
S
9

Using the latest OpenSSL sources you should be able to use the standalone toolchain from the Android NDK and configure + make. The basic steps are:

  1. export TOOL_PREFIX, CC and SYSROOT to point at appropriate toolchain paths
  2. Configure
  3. make

A couple of examples:

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
Shepp answered 29/5, 2013 at 23:48 Comment(6)
Hi, thanks. But can it be done with Windows? I will create a VM to try your example :)Sherlynsherm
I don't currently do Android development on Windows. If you can fulfill the requirements for Configure and friends (e.g. via Cygwin/UNIX like env) it should be fine.Shepp
With linux it works, thanks. But not with armv7, it throws this error: cryptlib.c:1:0: error: valor erróneo (armv7-a) para -march= switchSherlynsherm
Are you using the ARMv7a standalone toolchain (It does differ from the ARMv5). If I remember correctly (I cannot check at this moment) when you run the script to generate the toolchain you must supply a parameter to do this.Shepp
JoniJnm - "But can it be done with Windows?" - OpenSSL's Android cross compile script can probably be run under MinGW.Hotze
What about x86?Motionless

© 2022 - 2024 — McMap. All rights reserved.