2012-01-30 8 views
5

Necesito construir el último OpenSSL (1.0.0g) para una aplicación de Android. Intento seguir el ejemplo dado por https://github.com/fries/android-external-openssl, pero no puedo construirlo.No se puede construir una biblioteca externa de OpenSSL para Android NDK en Windows/Cygwin

Estoy ejecutando Windows 7 Professional (64 bits) con un Cygwin completo y reciente. He instalado Android SDK y NDK, y puedo construir y ejecutar con éxito la aplicación de muestra hello-jni del NDK.

Creé una nueva aplicación NDK de muestra llamada hello-openssl. En su directorio jni, creé un directorio openssl. Allí, Desabroché https://github.com/fries/android-external-openssl/zipball/master, lo que me dio esta estructura de árbol en c: \ \ samples \ android-NDK de Android \ hello-openssl:

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

entonces modificado el archivo Android.mk en el JNI directorio en un intento de incluir los archivos de OpenSSL:

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

include $(subdirs) 

Ahora cuando yo haga NDK-construcción, que compila varios archivos .c, pero luego falla rápidamente:

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 

Encontré http://osdir.com/ml/android-ndk/2010-07/msg00424.html, que me dice que "agregue jni y jni/include al LOCAL_C_INCLUDES" anterior en crypto/Android.mk, pero no puedo entender la sintaxis que debo usar para lograr esto.

Tampoco puedo entender que tengo la estructura de directorios correcta.

Agradezco sinceramente cualquier ayuda que pueda ofrecerse.

Gracias!

Respuesta

12

He resuelto este problema al abandonar https://github.com/fries/android-external-openssl y en su lugar usando https://github.com/guardianproject/openssl-android.

Se basa en un OpenSSL más reciente (1.0.0a) y se compila en el NDK sin modificaciones.

Tenga en cuenta que para utilizar estas bibliotecas en una aplicación de Android, debe cambiarles el nombre. Si simplemente incluye libssl.so y libcrypto.so en su aplicación, luego llame a System.LoadLibrary ("crypto") y System.LoadLibrary ("ssl"), obtendrá las bibliotecas OpenSSL incluidas en el sistema Android, no sus bibliotecas personalizadas.

Para hacer esto, simplemente haga una búsqueda de palabras completas y reemplace ("libssl" -> "libsslx", y "libcrypto" -> "libcryptox") en cada Android.mk (es decir, en/crypto,/ssl, y/apps).

Luego, en la aplicación de Android, llaman SystemLoadLibrary ("cryptox") y System.loadLibrary ("sslx")

+0

Hola, Estoy tratando de hacer lo mismo como lo hizo, he utilizado openssl-androide, construí las fuentes y obtuve mis archivos .so pero encontré problemas al usarlo en mi proyecto, escribí el archivo .c usando estas bibliotecas, lo puse en mi carpeta jni y escribí un archivo Android.mk que decía que también uso 2 más compartidos bibliotecas, todo se compila bien pero se bloquea en tiempo de ejecución con UnsatisfiedLinkError, sería genial si pudiéramos hablar. – onizukaek

Cuestiones relacionadas