RenderScript 包含适用于所有平台的本机二进制文件

RenderScript includes native binaries for all the platforms

我们的 Android 项目包含一些本地库,我们仅支持 arbeabi-v7。因此生成的 apk 仅包含此架构的本机库。

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

要添加 RenderScriptbuild.gradle 文件更改是:

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 或非标准解决方案。

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

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

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