我本来想引入Guava(Google Core Libraries for Java)的,目标是使用其中的一个工具类方法。以下方式添加依赖:
implementation 'com.google.guava:guava:27.0.1-jre'
但是偏偏天不遂人意,出现了errors:
Default interface methods are only supported starting with Android N (--min-api 24): boolean com.google.common.base.Predicate.test(java.lang.Object)
Message{kind=ERROR, text=Default interface methods are only supported starting with Android N (--min-api 24): boolean com.google.common.base.Predicate.test(java.lang.Object), sources=[Unknown source file], tool name=Optional.of(D8)}
大概是说, java8才支持静态接口方法,Android N 要求jdk版本为1.8。
解决方法呢就是编译时使用jdk1.8。
当然我也重新去 看了下Guava文档,确实有1.8的要求:
Guava comes in two flavors.
The JRE flavor requires JDK 1.8 or higher.
If you need support for JDK 1.7 or Android, use the Android flavor. You can find the Android Guava source in the android directory.
于是我进行了如下修改:
Project Structure–>SDK Location -->JDK location
原来是勾选的Use embedded JDK,现在取消,下面选择自己的jdk(1.8)的安装路径。
但是偏偏天不遂人意,又出现了errors:
Gradle sync failed: Uninitialized object exists on backward branch 70
Exception Details:
Location:
com/android/build/gradle/tasks/BuildArtifactReportTask.newArtifact(Lcom/android/build/api/artifact/BuildableArtifact;)Lcom/android/build/gradle/tasks/BuildArtifactReportTask$BuildableArtifactData; @119: goto
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: bb00 f459 2bb9 0139 0100 c000 6b2b b901
0x0000010: 3d01 0001 b901 4302 0059 1301 45b8 0148
0x0000020: c000 374d 3a0d 3a0c 3a0b 2c4e bb00 6859
0x0000030: 2c10 0ab8 003d b700 69c0 006b 3a04 2db9
0x0000040: 0054 0100 3a05 1905 b900 5a01 0099 002d
0x0000050: 1905 b900 5e01 003a 0619 0419 06c0 014a
0x0000060: 3a07 3a0e 1907 b901 4d01 003a 0f19 0e19
0x0000070: 0fb9 0075 0200 57a7 ffcf 1904 c000 773a
0x0000080: 0e19 0b19 0c19 0d19 0eb7 0150 b0
Stackmap Table:
full_frame(@70,{Object[#2],Object[#109],Object[#55],Object[#55],Object[#107],Object[#86],Top,Top,Top,Top,Top,Uninit... (show balloon)
这个error大概是因为Android Studio和Gradle使用了不同的JDk版本。所以出现了这个,可以使用AS自带的jdk,勾选Use embedded JDK。
最终在build.gradle添加,当然还是使用的AS自带的jdk,得以解决requires JDK 1.8 or higher的问题:
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
ps: 但是偏偏天不遂人意,我发现我想使用的工具类方法并不是我真正想要的,,?? 一定了加班加的眼花了…