升级play-services-ads到21.0.0报Val无法重赋值错误如何解决
错误原因
com.google.android.gms:play-services-ads 从21.0.0版本开始做了API破坏性调整:AdView类的adSize、adUnitId两个属性从之前的可写可变属性,改成了仅可读的val修饰属性,必须在实例化AdView的时候通过构造方法传入初始化,实例创建完成后不支持再重新赋值。原有代码是先创建空参AdView实例,再在apply块里给这两个val属性赋值,就会触发「Val cannot reassign(值不可重赋值)」的错误。
当前触发问题的依赖配置如下:
implementation 'com.google.android.gms:play-services-ads:21.0.0'
修复方案
把原来先创建AdView再赋值属性的写法,改成调用带三个参数的AdView构造方法,在实例化的时候就传入Context、广告尺寸、广告单元ID三个必填参数,不需要再额外给adSize、adUnitId赋值,修改后的Jetpack Compose实现代码如下:
AndroidView( factory = { context -> AdView( context = context, adSize = AdSize.FULL_BANNER, adUnitId = "ca-app-pub-....62" ).apply { loadAd(AdRequest.Builder().build()) } } )
- 补充说明:如果是Java代码调用该版本SDK,原来调用
setAdSize()、setAdUnitId()的写法也会编译报错,同样需要改成调用三参构造方法初始化AdView即可。
内容的提问来源于stack exchange,提问作者Marwan Talal
相关产品推荐
相关产品推荐

