最近我们团队的项目的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或以上,这个我没试过,因为老项目,这种东西瞎搞不得
|