【问题标题】:Including OpenSSL 1.1.0 .so in Android .aar在 Android .aar 中包含 OpenSSL 1.1.0 .so
【发布时间】:2018-10-18 11:41:58
【问题描述】:

主要问题:

有没有办法让 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 build 目录,我看到“intermediates -> jniLibs -> release”包含所有 .so,包括 *.so.1.1。 但是,在“中间体 -> library_and_local_jars_jni -> release”中查找它缺少 .so.1.1 文件。

更多信息:

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

感谢您的帮助。

【问题讨论】:

    标签: android ssl openssl aar .so


    【解决方案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",
    },
    

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

    make SHLIB_VERSION_NUMBER= SHLIB_EXT=.so

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      相关资源
      最近更新 更多