最近我们团队的项目的SDK升级到了31,然后我就在不知情的情况下git pull
了最新的代码
首次运行
拉下最新的代码之后点击运行,结果报错如下:
哦豁,提示31.0.0有损,好家伙,这玩意从来没动过还能损坏,emm。。。可能是网络问题导致下载损坏的,那就把31.0.0卸了重装,结果还是一样的错;那就排除文件有损的问题了
然后再往上找到了stackoverflow的这篇文章,看不懂英文?不要紧,还有中文的这篇
意思就是31.0.0的build工具缺少dx这个工具,有三种解决方式:
- 将SDK版本降到30或以下
- 将
build tools/30.0.0
中的dx工具复制过来- 进入Android SDK目录下的build tools目录下
- 将
30.0.0/dx.bat
拷到31.0.0/
下(Mac或Linux是dx
) - 将
30.0.0/lib/dx.jar
拷到31.0.0/lib/
下
- 将
build tools/31.0.0
中的d8直接复制为dx- 进入Android SDK目录下的build tools目录下
- 将
31.0.0/d8.bat
复制一份,然后改名为dx.bat
(Mac或Linux是d8 -> dx
) - 将
31.0.0/lib/d8.jar
复制一份,然后改名为dx.jar
问我d8、dx是干嘛的?看看这篇文章,我自己的
再次运行
不出意外,报了个新错:
这可如何是好,完全没头绪啊,百度也搜不出来,但是无意中看到一篇文章下的评论说将AS的JDK版本改成java11,就抱着试试的心态
Mac:Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle -> Gradle JDK改为java11
Windows:Settings -> Build, Execution, Deployment -> Build Tools -> Gradle -> Gradle JDK改为java11
然后编译,结果就编译过了,你说神奇不神奇。
你说这Android啊,不让你用Java8以上的语法,还这么多事儿,事儿精!!!
总结
第一种方法
targetSdk、compileSdk降级到30或以下
第二种方法
如果实在没办法降级,那就想办法把dx工具整出来,拷贝低版本,重命名d8都行
然后将AS的JDK版本提升到Java11
其他办法
其实应该还有第三种解决办法,也是google提倡的,将Gradle版本升级到7.0或以上,这个我没试过,因为老项目,这种东西瞎搞不得