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

问题描述:

我们的Android项目包含一些本地库,我们仅支持arbeabi-v7。所以生成的apk只包含这个体系结构的本地库。RenderScript包含所有平台的本机二进制文件

最近我们增加了RenderScript引起生成APK包括librsjni.solibRSSuport.so本地的即x86所有支持的平台,arbeabi-v7

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

defaultConfig { 
    // Other configs 

    renderscriptTargetApi 18 
    renderscriptSupportModeEnabled true 

} 

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

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

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

截至目前,我们已经增加了以下内容build.gradle

ndk { 
    abiFilters "armeabi-v7a" 
} 

gradle.properties

android.useDeprecatedNdk=true 

虽然此方法可以解决问题,但它似乎是一个黑客或非标准的解决方案。

有没有一种标准或推荐的方法来解决这个问题?

+0

恕我直言,** ** abiFilters是你的问题一个完美的标准溶液。 –

+0

@AlexCohn感谢您的回复。我所关心的是使用'android.useDeprecatedNdk'。有没有一种方法可以排除“non depricated ndk”的库? – Abdullah

如果你只使用预编译库,你最好的选择是采用splits功能:

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