RenderScript 包含适用于所有平台的本机二进制文件
RenderScript includes native binaries for all the platforms
我们的 Android 项目包含一些本地库,我们仅支持 arbeabi-v7
。因此生成的 apk 仅包含此架构的本机库。
最近我们添加了 RenderScript
,这会导致生成的 apk 包含 librsjni.so
和 libRSSuport.so
所有支持平台的本机,即 x86
、arbeabi-v7
等.
要添加 RenderScript
的 build.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
}
}
}
我们的 Android 项目包含一些本地库,我们仅支持 arbeabi-v7
。因此生成的 apk 仅包含此架构的本机库。
最近我们添加了 RenderScript
,这会导致生成的 apk 包含 librsjni.so
和 libRSSuport.so
所有支持平台的本机,即 x86
、arbeabi-v7
等.
要添加 RenderScript
的 build.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
}
}
}