注:第1、2种情况较常见
第1种可能的情况
原因:
Android Studio中目前的Kotlin插件版本 和 kotlin-gradle-plugin版本不一致。当版本不一致时,检查build.gradle中配置时会有提示,如下图:
可以看到,当前Gradle配置是1.1.3-2,而ide的插件版本已经升级到了1.1.51。
解决方法:
- 根据ide Kotlin插件版本,将build.gradle中kotlin-gradle-plugin版本修改为最新的版本号即可。
- 如重编译后未生效未解决,则因为1.1.51版本的gradle插件未下载,可重新启动项目即会自动下载,待下载完成后,gradle自动编译完成即不会再报此类错误。
第2种可能的情况
原因:
ide 某种bug
解决方法:
- File –> Invalifate caches/Restart –> Invalifate and Restart;
- 更新Android studio;更新Kotlin Plugin;如果用到了Anko,同时更新Anko Plugin。重启;
- build.gradle中Anko包版本修改为最新,例如:anko_version = ‘0.10.1’。有些时候build.gradle中不会提示当前Anko是否未最新,这时可以先去更新最新的ide的Anko plugin ,ide的Anko plugin 版本号一般会和Anko包版本号相同,这时可以根据ide的Anko plugin版本号直接填写build.gradle中Anko包版本号,rebuild自动下载和编译即可。
这种情况是我遇到的,最终检查后,发现是因为Anko不是最新版本导致的android.R资源在Anko写法时无法引用,但是在kt代码中并不会报错,故不易找到原因。
第3种可能的情况
原因:
有些时候,因为之前同一项目的Android Strudio关闭时,未正常关闭(如正在编译时关闭),导致该项目仍被java编译器占用;当重新打开该项目是,此时再编译会重启一个编译进程,未正常关闭的进程和新的进程相冲突,可能导致无法编译相关资源的引用关系。
解决方法:
- 结束pc中所有android studio相关的、java相关的进程,然后重新打开Android Strudio打开这个项目,rebuild即可。