在Android .aar中包含OpenSSL 1.1.0 .so

时间:2018-05-08 13:37:48

标签: android ssl openssl aar .so

主要问题:

Android aar构建过程是否有办法包含libssl.so.1.1

背景

我用openssl 1.1.0建立一个.aar。 共享对象openssl输出是' libssl.so.1.1'和' libssl.so' (加上libcrypto,但我现在将其排除在外)

使用共享对象创建.aar时,android库构建成功完成,但缺少以' .so.1.1'结尾的共享对象。但是,它包括明确以' .so'

结尾的其他共享对象

我假设android aar gradle任务正在对以' .so'结尾的文件进行严格检查。

查看android构建目录,我看到' intermediates - > jniLibs - >释放'包含所有.so,包括* .so.1.1。 但是,寻找中间体 - > library_and_local_jars_jni - >释放'它缺少.so.1.1文件。

更多信息:

  • 我手动编译OpenSSL,然后将.so文件放入Android aar库项目中。 (我已经通过直接在apk中加载它们来测试它们是正确的)
  • OpenSSL目前似乎不支持较新的NDK,因此我使用的是NDK 13.
  • Android库项目的目标是Android SDK 27,最少21个
  • Android库项目,包括.so' s,而不是以.so.1.1结尾的那个
  • 共享对象文件将进入相应的架构目录,例如' arm64-v8a'

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我能够在openssl GitHub问题跟踪器中找到确切的问题 https://github.com/openssl/openssl/issues/3902

使用OpenSSL 1.1.0修改Configurations/10-main.conf以及

"android64" => {"android" => {两个部分中,您必须像shared_extension => ".so",一样添加inherit_from(确保它在"android64" => { inherit_from => [ "linux-generic64" ], shared_extension => ".so", cflags => add(picker(default => "-mandroid -fPIC --sysroot=\$(CROSS_SYSROOT) -Wa,--noexecstack")), bin_cflags => "-pie", }, 下面),

make SHLIB_VERSION_NUMBER= SHLIB_EXT=.so

较新的OpenSSL版本(例如1.1.1)看起来使用以下

{{1}}