2012-01-30 14 views
5

Potrzebuję zbudować najnowszą wersję OpenSSL (1.0.0g) dla aplikacji na Androida. Próbuję postępować zgodnie z przykładem podanym przez https://github.com/fries/android-external-openssl, ale po prostu nie mogę go zbudować.Nie można zbudować zewnętrznej biblioteki OpenSSL dla Androida NDK na Windows/Cygwin

Używam Windows 7 Professional (64-bit) z pełnym i najnowszym Cygwin. Zainstalowałem Android SDK i NDK, i mogę z powodzeniem zbudować i uruchomić przykładową aplikację NDK's hello-jni.

Stworzyłem nową przykładową aplikację NDK o nazwie hello-openssl. W katalogu jni utworzyłem katalog openssl. Tam rozpakowane https://github.com/fries/android-external-openssl/zipball/master, który dał mi tę strukturę drzewa pod c: \ android \ android-NDK \ samples \ hello-openssl:

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

I potem zmodyfikował Android.mk plik w JNI katalog próbując dołączyć pliki OpenSSL:

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

include $(subdirs) 

teraz kiedy wykonać NDK-build, kompiluje kilka plików .c, ale potem szybko się nie powiedzie:

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 

Znalazłem http://osdir.com/ml/android-ndk/2010-07/msg00424.html, który mówi, żebym "dodał jni i jni/include do powyższego LOCAL_C_INCLUDES" w crypto/Android.mk, ale nie mogę znaleźć składni, której powinienem użyć, aby to osiągnąć.

Nie mogę również stwierdzić, że mam poprawną strukturę katalogów.

Serdecznie dziękuję za pomoc, którą można zaoferować.

Dzięki!

Odpowiedz

12

Rozwiązałem ten problem, porzucając https://github.com/fries/android-external-openssl i zamiast tego używając https://github.com/guardianproject/openssl-android.

Oparta jest na nowszym OpenSSL (1.0.0a) i jest budowana w NDK bez żadnych modyfikacji.

Pamiętaj, że aby móc korzystać z tych bibliotek w aplikacji na Androida, musisz zmienić ich nazwę. Jeśli po prostu umieścisz wynikową bibliotekę libssl.so i libcrypto.so w swojej aplikacji, a następnie wywołaj System.LoadLibrary ("crypto") i System.LoadLibrary ("ssl"), otrzymasz biblioteki OpenSSL włączone do systemu Android, a nie Twoje niestandardowe biblioteki.

Aby to zrobić, po prostu wykonaj wyszukiwanie pełnotekstowe i zamień ("libssl" -> "libsslx" i "libcrypto" -> "libcryptox") w każdym Android.mk (np. W/crypto,/ssl i/apps).

Następnie w aplikacji na Androida, zadzwoń SystemLoadLibrary ("cryptox") i System.loadLibrary ("sslx")

+0

Witam, staram się robić to samo, co ty, użyłem openssl-android, zbudowałem źródła i dostałem moje pliki .so, ale napotykam problemy podczas korzystania z nich w moim projekcie. Napisałem plik .c używając tych bibliotek, umieściłem go w moim folderze jni i napisałem plik Android.mk informujący, że używam jeszcze 2 udostępnionych biblioteki, wszystko kompiluje się dobrze, ale zawiesza się w środowisku wykonawczym z UnsatisfiedLinkError, byłoby świetnie, gdybyśmy mogli porozmawiać. – onizukaek

Powiązane problemy