Mac OSX 上 Android Studio 编译使用 JAVA8 及 retrolambda 的项目出错解决方案

阿里云产品限时红包,最高 ¥1888 元,立即领取

问题发生环境及表现:

  1. Mac OSX Yosemite 系统
  2. 项目中使用 retrolambda 及 java8
  3. 在 Android Studio 中直接 build 时出现如下错误:
1
2
3
4
编译器 (1.8.0_40) 中出现异常错误。 如果在 Bug Parade 中没有找到该错误, 请在 Java Developer Connection (http://java.sun.com/webapps/bugreport) 中建立 Bug。请在报告中附上您的程序和以下诊断信息。谢谢。
com.sun.tools.javac.code.Symbol$CompletionFailure: 找不到java.lang.invoke.MethodType的类文件
Error:Execution failed for task ':app:_compileDebugJava'.
> Compilation failed; see the compiler error output for details.
1
2
3
4
5
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:_compileDebugJava'.
> Compilation failed; see the compiler error output for details.

问题探索及解决方案:

  1. 首先确保根据 gradle-retrolambda 官方文档正确配置
  2. 在系统中设置 JAVA8_HOME 等环境变量。设置完成以后在正常情况下在终端中可以正常编译。
  3. 这时在 Android Studio 中直接 build 依然不行,原因是 Android Studio 在启动过程中不会读取 /home/user/.bash_profile/home/user/.bashrc,因此 build.gradle 中 retrolambda 的配置无法获取正确的 JAVA8_HOME 路径。
  4. 可行的解决方案:
    • 通过终端重新启动 Android Studio,这样可以读取 /home/user/.bash_profile/home/user/.bashrc 中设置的环境变量
    • 设置系统级的环境变量,如在 /etc/profile 中添加 JAVA8_HOME

参考:https://github.com/evant/gradle-retrolambda/issues/17