2012-01-30 18 views
5

Ho bisogno di creare l'ultimo OpenSSL (1.0.0g) per un'applicazione Android. Sto cercando di seguire l'esempio dato da https://github.com/fries/android-external-openssl, ma non riesco a farlo costruire.Impossibile creare una libreria OpenSSL esterna per Android NDK su Windows/Cygwin

Sto eseguendo Windows 7 Professional (64-bit) con un Cygwin completo e recente. Ho installato Android SDK e NDK e posso creare ed eseguire correttamente l'applicazione di esempio ciao-jni di NDK.

Ho creato una nuova app NDK di esempio chiamata hello-openssl. Nella sua directory jni, ho creato una directory openssl. Lì, ho scompattato https://github.com/fries/android-external-openssl/zipball/master, che mi ha dato questa struttura ad albero sotto c: \ samples \ android-NDK \ android \ ciao-openssl:

jni 
+- openssl 
    +- apps 
    +- crypto 
    +- include 
     +- openssl 
    +- ssl 

Ho poi modificato il file Android.mk nel JNI directory nel tentativo di includere i file di OpenSSL:

subdirs := $(addprefix $(LOCAL_PATH)/,$(addsuffix /Android.mk, \ 
    openssl \ 
)) 

include $(subdirs) 

Ora, quando eseguo NDK-build, compila diversi file .c, ma poi non riesce rapidamente:

Compile thumb : crypto <= cryptlib.c 
In file included from jni/openssl/crypto/cryptlib.c:117: 
jni/openssl/crypto/cryptlib.h:65:18: error: e_os.h: No such file or directory 
jni/openssl/crypto/cryptlib.h:72:28: error: openssl/crypto.h: No such file or directory 

Ho trovato http://osdir.com/ml/android-ndk/2010-07/msg00424.html, che mi dice di "aggiungere jni e jni/include al LOCAL_C_INCLUDES" sopra in crypto/Android.mk, ma non riesco a capire la sintassi che dovrei usare per ottenere questo.

Inoltre non riesco a capire di avere la struttura di directory corretta.

Apprezzo sinceramente qualsiasi aiuto che possa essere offerto.

Grazie!

risposta

12

Ho risolto questo problema abbandonando https://github.com/fries/android-external-openssl e utilizzando invece https://github.com/guardianproject/openssl-android.

Si basa su un OpenSSL (1.0.0a) più recente e crea nell'NDK senza modifiche.

Si noti che per utilizzare queste librerie in un'app Android, è necessario rinominarle. Se nella tua app includi semplicemente libssl.so e libcrypto.so, quindi chiama System.LoadLibrary ("crypto") e System.LoadLibrary ("ssl"), otterrai le librerie OpenSSL incluse nel sistema Android, non le tue librerie personalizzate

Per fare questo, basta fare una ricerca full-parola e sostituire ("libssl" -> "libsslx", e "libcrypto" -> "libcryptox") in ciascuna Android.mk (vale a dire, in/crypto,/ssl e/app).

Poi, nel tuo Android, chiamano SystemLoadLibrary ("cryptox") e System.loadLibrary ("SSLX")

+0

Ciao, sto cercando di fare la stessa cosa che avete fatto, io ho usato openssl-androide, ho creato i sorgenti e ho ottenuto i miei file .so ma ho riscontrato problemi durante l'utilizzo nel mio progetto, ho scritto file .c usando queste librerie, l'ho messo nella mia cartella jni e ho scritto un file Android.mk che diceva che uso anche altri 2 condivisi librerie, tutto si compila bene ma si blocca in runtime con un UnsatisfiedLinkError, sarebbe bello se potessimo parlare. – onizukaek

Problemi correlati