解决一次RenderScript引起的Lint错误
最近在开发中使用RenderScript做了一个高斯模糊,而且编译运行的也挺好,但是却无法通过Lint检查,提示错误如下:
All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 26.0.1, 26.0.0. Examples include com.android.support:renderscript:26.0.1 and com.android.support:animated-vector-drawable:26.0.0
这段话的大致意思是:所有com.android.support
中的库必须使用相同的版本,混合使用不同的版本可能会造成运行期崩溃。Rendscript使用了26.0.1的版本,animated-vector-drawable使用了26.0.1版本。
造成这个问题的原因是,在程序中,我使用了support包中的Renderscript,同时也使用了support包中的vector-drawable,但是这两个版本不一致。
我们知道可以在dependencies
中添加依赖来使用support中的库,比如
compile 'com.android.support:animated-vector-drawable:26.0.0'
但是对于Renderscript来说,我们没有办法采用这种方式来指定Renderscript的版本。
compile com.android.support:renderscript:26.0.0
这样Gradle会报错的。
一般我们指定RenderScript版本采用的是在build.gralde的defaultConfig
中添加如下语句:
renderscriptTargetApi 19
renderscriptSupportModeEnabled true
第一句话是用来指定RenderScript生成的字节码版本,但是如果这个值和我们在gradle中minSdk设置的值不一样,就会忽略这个值,而采用buildToolVersion
的值来设置一个兼容的版本。
而我在build.gradle中设置的buildToolVersion
值为26.0.1,其余的support包中库的版本都采用了26.0.0.
解决这个问题的办法一般有三个:
- 把所有的support包中的库都使用26.0.1版本,但是牵涉太大了,领导也不会同意。
- 更改
buildToolVersion
的版本为26.0.0,但是也有风险。 - 直接去掉上面那两句话,同时在代码中使用系统内置的RenderScript,不使用support包当中的。
由于我们的项目minSdk是18(Android 4.3),在这个版本上已经很好的RenderScript的功能了,所以最后采用的士第三种方法。
网友评论