2012-01-30 171 views
5

我需要爲Android應用程序構建最新的OpenSSL(1.0.0g)。我試圖按照https://github.com/fries/android-external-openssl給出的例子,但我無法建立它。無法在Windows上爲Android NDK構建外部OpenSSL庫/ Cygwin

我正在運行Windows 7專業版(64位)和最新的Cygwin。我已經安裝了Android SDK和NDK,並且我可以成功構建並運行NDK的hello-jni示例應用程序。

我創建了一個名爲hello-openssl的新樣本NDK應用程序。在它的jni目錄中,我創建了一個openssl目錄。在那裏,我解壓https://github.com/fries/android-external-openssl/zipball/master,這給了我在c此樹結構:\機器人\ Android的NDK \樣本\ HELLO-的OpenSSL:

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

然後我修改了Android.mk文件中的JNI企圖包括OpenSSL的文件目錄:

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

include $(subdirs) 

現在,當我執行NDK建造,它編譯幾個.c文件,但隨後很快失敗:

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 

我發現http://osdir.com/ml/android-ndk/2010-07/msg00424.html,它告訴我「將 jni和jni/include添加到crypto/Android.mk中的上述LOCAL_C_INCLUDES」中,但我無法弄清楚我應該用來實現這一點的語法。

我也想不出我有正確的目錄結構。

我衷心感謝任何可以提供的幫助。

謝謝!

回答

12

我解決了這個問題,放棄https://github.com/fries/android-external-openssl,而是使用https://github.com/guardianproject/openssl-android

它基於更新的OpenSSL(1.0.0a),它在NDK中沒有任何修改就構建。

請注意,爲了在Android應用程序中使用這些庫,您必須重命名它們。如果你只是在你的應用程序中包含結果libssl.so和libcrypto.so,然後調用System.LoadLibrary(「crypto」)和System.LoadLibrary(「ssl」),你會得到包含在Android系統中的OpenSSL庫,而不是您的自定義庫。爲了做到這一點,只需在每個Android.mk中(即在/ crypto,/)中進行全文搜索並替換(「libssl」 - >「libsslx」和「libcrypto」 - >「libcryptox」 ssl和/ apps)。

然後在你的Android應用程序,調用SystemLoadLibrary( 「cryptox」)和的System.loadLibrary( 「sslx」)

+0

您好,我試圖做像你一樣,我用的OpenSSL的Android同樣的事情,構建源代碼並獲得了我的.so文件,但是在我的項目中使用它時遇到了問題,我使用這些庫編寫了.c文件,將它放在我的jni文件夾中,並編寫了一個Android.mk文件,告訴我還使用了2個共享圖書館,一切都編譯好,但在運行時崩潰與UnsatisfiedLinkError,這將是很好,如果我們可以談。 – onizukaek 2013-08-18 14:36:18