【问题标题】:RenderScript includes native binaries for all the platformsRenderScript 包含适用于所有平台的本机二进制文件
【发布时间】:2017-05-28 14:04:07
【问题描述】:

我们的 Android 项目包含一些原生库,我们仅支持 arbeabi-v7。所以生成的 apk 只包含这个架构的原生库。

最近我们添加了RenderScript,这使得生成的apk包含所有支持平台的librsjni.solibRSSuport.so本机,即x86arbeabi-v7等。

build.gradle 文件更改为添加RenderScript 是:

defaultConfig {
    // Other configs

    renderscriptTargetApi 18
    renderscriptSupportModeEnabled true

}

生成的 apk libs 文件夹如下所示:

libs
 - armeabi-v7
     - librsjni.so
     - libRSSuport.so
     - Other native libs
 - x86
     - librsjni.so
     - libRSSuport.so
 - Other archs
     - librsjni.so
     - libRSSuport.so

这会导致主要 abi 不是 armeabi-v7 的手机出现问题,因为运行时可能会认为支持非 armeabi-v7 架构并尝试运行它并导致应用程序崩溃。

截至目前,我们已将以下内容添加到 build.gradle

ndk {
    abiFilters "armeabi-v7a"
}

gradle.properties:

android.useDeprecatedNdk=true

虽然这解决了问题,但它确实看起来像是一个 hack 或非标准解决方案。

是否有解决此问题的标准或推荐方法?

【问题讨论】:

  • 恕我直言 abiFilters 是您问题的完美标准解决方案。
  • @AlexCohn 感谢您的回复。我关心的是android.useDeprecatedNdk的使用。有没有办法用“非贬低 ndk”排除库?

标签: android android-ndk java-native-interface renderscript


【解决方案1】:

如果您只使用预建库,最好的选择是使用splits 功能:

android {
  …
  splits { 
    abi {
      enable true
      reset()
      include "armeabi-v7a"
      universalApk false
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 2015-04-24
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    相关资源
    最近更新 更多