2013-05-29 177 views
3

我創建了一個使用本機代碼的android應用程序。如何使用Android NDK和Windows構建OpenSSL以生成libcrypto.a

它需要來自OpenSSL的libcrypto.a庫,我不記得我在哪裏下載它,但它的工作原理。問題是lib的版本是1.0.0a,我想更新到最新版本(現在是v1.0.1e)。我下載了https://github.com/android/platform_external_openssl並試圖編譯它,但編譯時出現了很多錯誤。我不知道如何生成lib。

或者,也許c和h文件(從http://www.openssl.org/source/)可以包含在我的c & h文件中,而不是使用lib?

謝謝!

+0

我知道,這是不是一個回答你的問題,但你可以使用spongycastle庫(http://rtyley.github.io/spongycastle/)作爲替代。它不需要NDK,它可以工作。 – Analizer

回答

9

使用最新的OpenSSL源代碼,您應該可以使用Android NDK的獨立工具鏈並配置+ make。基本步驟是:

  1. 出口TOOL_PREFIX,CC和SYSROOT在適當的工具鏈路徑指向
  2. 配置
  3. 使

幾個例子:

的ARMv5TE

CC="/path/to/arm-linux-androideabi-gcc -mtune=xscale -march=armv5te -msoft-float --sysroot=/ndk_path/platforms/android-9/arch-arm" 
./Configure android no-asm

的ARMv7

CC="/path/to/arm-linux-androideabi-gcc -march=armv7-a -mfloat-abi=softfp --sysroot=/ndk_path/platforms/android-9/arch-arm" 
./Configure android-armv7 no-asm
+0

嗨,謝謝。但可以用Windows來完成嗎?我將創建一個虛擬機來嘗試您的示例:) – JoniJnm

+0

我目前不在Windows上進行Android開發。如果你可以滿足配置和朋友的要求(例如通過像Cygwin/UNIX這樣的env),它應該沒問題。 – NuSkooler

+0

隨着Linux的工作,謝謝。但是不能用armv7,它會拋出這個錯誤:cryptlib.c:1:0:error:valorerróneo(armv7-a)para -march = switch – JoniJnm

10

如果你不想自己編譯的庫我剛做這一點,並上傳至GitHub上。 OpenSSL的

它包括用於臂和x86靜態和共享庫的

版本1.0.2(2015年1月22日),還包括Android.mk和包括文件。

https://github.com/emileb/OpenSSL-for-Android-Prebuilt

+2

我試圖建立自己的openssl靜態庫,但有一些問題。你能分享我可以參考的構建腳本來找到問題嗎? – pree

+0

從2016年7月11日起,Google Play將使用舊版本的OpenSSL封鎖應用程序。您必須使用OpenSSL 1.02f/1.01r或更高版本。 –