Android OpenSSL构建配置armv7对所有arm设备都安全吗?

时间:2014-08-07 03:40:54

标签: android android-ndk openssl

我目前正在使用http://wiki.openssl.org/index.php/Android将我们的OpenSSL项目更新为1.0.1i。

查看配置文件,我发现OpenSSL有2个Android构建选项:android-armv7和android-x86。

我已经能够构建armv7配置,它似乎在Nexus 5和Kindle Fire 1st Gen上正常工作。

我想知道的是,如果它在armeabi目录而不是armeabi-v7a目录中,我的当前库是否可以工作?如果OpenSSL是用armv7构建的,但我的项目库是用老手臂构建的,我无法找到足够的信息。

注意:我的最低API级别是8。

1 个答案:

答案 0 :(得分:1)

  

我想知道的是,如果它在armeabi目录而不是armeabi-v7a目录中,我的当前库是否可以工作?

我认为这里有几个问题。首先,您可以将libssllibcrypto放入armeabi/。这是一个Android问题(不是OpenSSL问题)。我似乎记得Brian在NDK邮件列表上谈到这个问题(但我目前无法找到它)。我相信这个想法是armeabi/是一个后备,如果找不到更具体的库,例如armeabi-v7a/

其次,您是否可以在其他平台上运行ARMv7a版本的libssllibcrypto。我相信ARMv7a在ARMv7上添加了一些管理程序扩展,所以你应该没问题,因为OpenSSL不使用它们。但是,如果在使用ARMv6或ARMv5的旧设备上运行,您可能会遇到麻烦。

在这种情况下,您可能希望下载为ARMv5构建的旧版NDK,然后将libssllibcrypto的ARMv5版本放在armeabi/中。您可以在Android NDK找到旧版本的NDK,大约是页面的三分之一。

更具体地说,Android 2.2是API 8,它是在2010年5月左右发布的。所以你可能想要从2010年3月开始使用Android NDK Revision 3进行获取和构建.NDK R3仅支持armeabi并且有针对性ARMv5TE(来自CPU-ARCH-ABIS.TXT文件)。下载是http://dl.google.com/android/ndk/android-ndk-r3-linux-x86.zip


OpenSSL不遵循Standalone Toolchain对ARMv7a的说明。它遗漏了-mfloat-abi=softfp标志。您可能无法调用将float从Java传递到库的函数。它们并不多,但其中一个是RAND_add。熵估计作为浮点数传递,在不兼容之后,您的估计值可能为0.0f。请参阅NDK邮件列表中的Hard-float and JNI[Bug #3080]: Android NEON and CFLAGS options


以下是自述文件中您应该注意的说明:

  III.3. Automatic extraction of native code at install time:
  -----------------------------------------------------------

    When installing an application, the package manager service will scan
    the .apk and look for any shared library of the form:

         lib/<abi>/lib<name>.so

    If one is found, then it is copied under $APPDIR/lib/lib<name>.so,
    where $APPDIR corresponds to the application's specific data directory.

如果您更新APK并且没有任何更改,请务必删除lib\下的任何内容或首先删除APK(他们倾向于成为&#34;粘贴&#34;)。


您可能遇到的另一个问题是构建和编译1.0.1。确保提供具有不同名称的包装器共享对象。否则,您可能会在运行时链接0.9.8,而不是APK中的1.0.1档。这是因为Zygote加载了Android的OpenSSL版本,该版本为0.9.8。后来,当Zygote要求创建你的进程时,链接加载器不会映射你的OpenSSL版本,因为它已经存在于Zygote中。


  

OpenSSL有2个Android构建选项:android-armv7和android-x86

我在2014年6月向脚本添加了android-x86。我能够通过一个补丁来完成构建:[Bug #3398] PATCH: fix broken compile on android-x86 with no-comp configure option。我没有x86 Android设备,所以我无法在设备上运行自检。欢迎提供反馈。