2010-06-15 66 views

回答

3

你有沒有試過這種,它是隨機配備在Android中的OpenSSL一個獨立的構建: https://github.com/fries/android-external-openssl/blob/master/README.android

+0

我們實際上現在維護我們自己的這個版本:https://github.com/guardianproject/android-ffmpeg – 2013-02-22 19:27:28

+0

我們正在使用的guardianproject提供OpenSSL的構建..我現在想升級由於最近的android playstore安全警報導致的openssl版本。我按照Readme文件中的步驟進行了操作,但卡住了:5)在構建之前進行清理: m -j16 clean-libcrypto clean-libssl clean-openssl clean-ssltest。 據我所知,當你從源代碼構建android時,m和mm是可用的,所以我沒有找到m:命令,並在下一步中找到mm。任何幫助是極大的讚賞! – Nonos 2016-04-04 16:26:15

+0

@Nonos你有沒有得到任何解決方案來更新OpenSSL的版本? 我也陷入了第5步。如果你能幫助我,Herte是我的[問題](http://stackoverflow.com/questions/36493508/how-to-update-openssl-version-in-csipsimple)。 – 2016-04-19 06:56:42

2

我將介紹幾個技巧有關使用OpenSSL與Android:

  1. 有必要建立使用NDK工具OpenSSL庫,否則他們將與NDK不兼容。 Compiling the latest OpenSSL for Android

    CC=~/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc 
    ./Configure android-armv7 
    export ANDROID_DEV=~/android-ndk-r9//platforms/android-8/arch-arm/usr 
    make build_libs 
    

    假設該命令將在OpenSSL的源目錄中執行。

  2. 爲了使用這些庫(ssl和crypto)與ndk自己的庫,您需要在jni文件夾中創建額外的* .mk文件。例如:

    include $(CLEAR_VARS) 
    
    LOCAL_MODULE := ssl-crypto 
    LOCAL_SRC_FILES := openssl-crypto/libcrypto.so 
    
    include $(PREBUILT_SHARED_LIBRARY) 
    

    ,並將其納入到主Android.mk:

    include $(LOCAL_PATH)/openssl-ssl/Android.mk 
    

    而且可能添加

    include $(CLEAR_VARS) 
    

    後,爲避免錯誤。圖書館將被放入libs/armabi.apk

  3. 如果您遇到錯誤could not load library ... needed by ...這可能意味着您的圖書館具有版本號的soname。 AFAIK ndk目前無法與此類圖書館合作。有一種變通方法(Dalvik is looking for .so file with '.0' extension - why?):

    rpl -R -e library.so.1.1 "library.so\x00\x00\x00\x00" libs obj 
    

    其中rpl是Linux的字符串替換工具。在構建之後和運行應用程序之前運行此腳本,它將從項目文件中刪除版本號。點擊鏈接查看更多信息。

    如果您使用C++編譯器,您的C函數中可能會出現「未定義引用」錯誤。使用extern "C" {}來避免這種情況(有關更多信息,請參閱「C++ name mangling」)。

  4. 最後不要忘記包含使用網絡進入清單的權限。

相關問題