升级compileSdkVersion至27及支持库后Kotlin Fragment报错求非手动解法
嘿,我太懂你这种升级依赖后一堆报错、又不想大动干戈重写Fragment的崩溃感了!不用慌,大部分情况下不用重构代码就能搞定,试试下面这些方案:
统一Fragment导入包
很多时候报错是因为项目里混用了原生android.app.Fragment和支持库android.support.v4.app.Fragment(或android.support.v7.app.Fragment)。升级后支持库的API和原生Fragment的差异被放大,导致兼容性问题。
你只需要批量替换所有Fragment的导入语句,确保全部使用支持库版本的Fragment——IDE里用全局替换功能就能搞定,完全不用改业务代码。压制废弃方法的错误提示
升级到27后,部分旧的Fragment方法(比如onAttach(Activity))会被标记为废弃。如果IDE把这些废弃方法标红报错,不用急着重写,只需要在方法上加上@SuppressWarnings("deprecation")注解就能压制错误,这些废弃方法在27.0.2版本里依然可以正常运行。强制统一支持库依赖版本
第三方库可能依赖了旧版本的支持库,和你升级的27.0.2版本冲突,导致Fragment相关的类加载异常。你可以在app模块的build.gradle里添加以下配置,强制所有支持库模块统一使用27.0.2版本:configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '27.0.2' } } } }这个配置会自动处理所有依赖冲突,不用修改任何Fragment代码。
调整Activity的继承类
如果你的Activity还是继承自原生android.app.Activity,而Fragment用的是支持库版本,必然会出现依附失败的错误。只需要把Activity改成继承AppCompatActivity(或FragmentActivity),配合支持库Fragment使用即可——这一步只需要修改Activity的继承语句,不用动Fragment的代码。清理IDE缓存
有时候报错只是IDE缓存的锅,试试点击File -> Invalidate Caches / Restart,清理完缓存重启IDE后,很多“假错误”会自动消失。
内容的提问来源于stack exchange,提问作者Pavel Poley

