【发布时间】:2017-05-28 14:04:07
【问题描述】:
我们的 Android 项目包含一些原生库,我们仅支持 arbeabi-v7。所以生成的 apk 只包含这个架构的原生库。
最近我们添加了RenderScript,这使得生成的apk包含所有支持平台的librsjni.so和libRSSuport.so本机,即x86、arbeabi-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