文章目录
一、报错信息
二、解决方案
一、报错信息
Google Play 上架要求 Android 的编译版本 和 目标版本都要高于 30 才可以上传 ;
将 Android 的编译版本 和 目标版本 都升级为 30 3030 之后 , Kotlin 的编译检查变得更严格 , 之前不规范的代码需要逐个修改 ;
将编译版本 compileSdkVersion 和 目标版本 targetSdkVersion 由 28 修改为 30 ;
android { compileSdkVersion 30 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.xxx.xxx" minSdkVersion 19 targetSdkVersion 30 versionCode 1 versionName "0.1" } }
编译时报错如下 :
Smart cast to 'Bitmap' is impossible, because 'bitmap' is a mutable property that could have been changed by this time
在 编译版本 compileSdkVersion 和 目标版本 targetSdkVersion 都为 28 2828 时 , 编译不报上述错误 ;
改了下 Android 编译版本号 , 报了 286 286286 个错误 , 今天逐个解决上述编译错误 ;
二、解决方案
错误分析 :
该错误报错位置是调用时 , 在方法参数中 , 应该传入非空参数的位置 , 传入了可空参数 ;
此类型错误与 Type mismatch: inferred type is Bitmap? but Bitmap was expected 错误类似 ;
网上有的解决方案是定义一个 val 常量 , 作为中转 , 将常量传入参数 ; 这样修改感觉太麻烦 , 应用中有几百处此类型错误 ; ( 该方案可以作为备选方案使用 )
解决方案 : Canvas 的绘制位图的方法是 Android 系统方法 , 方法无法修改 , 只能修改参数 ;
在传入的参数后 , 添加 !! 符号 , 即可将可空参数转为非空参数使用 ;
canvas?.drawBitmap(bitmap!!, matrix, paint)
修改后 , 上述问题解决 ;