OpenSSL for Android support
-
@SGaist that
build-all-arch.sh
script still fails with a couple of errors:- Makefile.org doesn't exist (but proceeds anyway)
- target android-armv7 doesn't exist!
If I change the target to
android-armeabi
in the script, then it proceeds further but fails withIn file included from /usr/include/stdlib.h:55:0, from crypto/aes/aes_core.c:41: /usr/include/bits/floatn.h:74:1: error: unknown machine mode '__TC__' typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__))); ^ /usr/include/bits/floatn.h:86:9: error: unknown type name '__float128' typedef __float128 _Float128; ^ In file included from /usr/include/stdlib.h:55:0, from crypto/aes/aes_locl.h:15, from crypto/aes/aes_ecb.c:13: /usr/include/bits/floatn.h:74:1: error: unknown machine mode '__TC__' typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__))); ^ /usr/include/bits/floatn.h:86:9: error: unknown type name '__float128' typedef __float128 _Float128;
I think I'm on the wrong path.
-
@evergreen4life Thank you but that sounds like a major hack I'd like to avoid if possible.
-
@mateczek Thank your for this. Your script succeeds in producing the libcrypto.so and libssl.so. However, when I deploy them along with my app to the phone, I get
W libmyapp.so: (null):0 ((null)): qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method W libmyapp.so: (null):0 ((null)): qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new W libmyapp.so: (null):0 ((null)): qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init W libmyapp.so: (null):0 ((null)): qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error W libmyapp.so: (null):0 ((null)): qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
The network calls do not succeed and I'm guessing those errors are the reason. What am I missing?
-
-
A couple of updates:
- I tried compiling
openssl-1.1.0h
(current stable version) against the old android ndk (r10e) because people seem to have reported that working. Well, it compiled, but it didn't work in the app. The errors were similar to the ones I got with @mateczek's script. I also noticed
qt.network.ssl: Incompatible version of OpenSSL
error, but that could have been present with @mateczek's result too, and I could have just missed it. So, it resulted in a similar output. - Then I decided to give
openssl-1.0.2o
(current stable LTS version) a try. To my astonishment, it compiled, and it worked in the app!
So, the conclusion is:
- use
openssl-1.0.x
LTS version, until it's supported - use
android-ndk-r10e
, until it's supported - use these instructions
The remaining question: is this a known issue? Is there a bug to update openssl support to more recent openssl and android ndk versions?
For reference, I run OpenSUSE Tumbleweed and keep it updated. Qt Creator 4.7.0. Qt 5.11.1. I'm happy to test and provide additional information if anyone has any ideas.
- I tried compiling
-
@Unix-One said in OpenSSL for Android support:
The remaining question: is this a known issue? Is there a bug to update openssl support to more recent openssl and android ndk versions?
Checking Qt's source code, you'll find that OpenSSL 1.1.x is not yet supported...
... if (!_q_SSLeay || q_SSLeay() >= 0x10100000L) { // OpenSSL 1.1 has deprecated and removed SSLeay. We consider a failure to // resolve this symbol as a failure to resolve symbols. // The right operand of '||' above is ... a bit of paranoia. delete libs.first; delete libs.second; qCWarning(lcSsl, "Incompatible version of OpenSSL"); return false; } ...
-
OpenSSL 1.1 has a backend in Qt since Qt 5.10 but you have to build Qt by hand in order to use it currently.
-
@Pablo-J-Rogina @SGaist that is good to know - would have been useful information on the instructions page that would potentially save developers a lot of time. I might update the wiki with the basic steps for minimum android packaging and deployment (given I find enough time of course).
Thank you all for your help.
-
@AlfredoC concerning your guide, i have setup a VM so that i could build the apk in ubuntu (i have given up doing it in windows) ubuntu 10.10 runs openssl v 1.1.1. as in your guide says that that wont do, how actually do i use 1.0.2p? can i install it directly? or do i just extract it? im sorry very noob question here.
-
@AlfredoC hint to your blog post: Qt 5.12 now uses NDK r18b
-
@Alfredo Thank you for the blog post but I'm still having trouble, when I get to the "make depend" part it gives me this error:
"GCC, does not understand command line option "-mandroid""
Based on a google search I'm not using the right GCC, im using (x86) and not the android one in the NDK?Im confused as to how to do this properly.
-
have not tried yet, but this looks great: https://github.com/akontsevich/openssl-android-build
-
This one worked like a charm, took 10 min overall.