D8减震:意外的类型调整

时间:2018-06-23 08:15:29

标签: android dex

我在gradle.properties的Android Studio 3.1.3中启用了新的D8指导:

android.enableD8.desugaring=true

现在在仅Java模块之一中,编译会因该错误而失败:

com.android.tools.r8.errors.Unreachable: 
Unexpected type adjustment from java.lang.String[] to java.lang.Object[]

这里是full stack-trace
注意:旧的dexer可以正常工作(当我停用上述选项时)

我已经检查了Java模块,甚至在任何Java文件中都找不到String[]Object[]。添加--debug --scan并不能使我对问题可能出在什么地方有更多的了解。

任何想法可能是什么问题,或者如何从dexer获取更详细的错误信息:例如错误代码在哪个文件中?

1 个答案:

答案 0 :(得分:0)

尽管原因可能取决于项目,但我想与我分享解决此错误的方式:

  1. 将失败的jar重命名为zip
  2. 直接在其上运行D8,类似 D:\Development\Tools\android-sdk\build-tools\28.0.2\d8.bat D:\Development\<PROJECT_PATH>\build\intermediates\intermediate-jars\debug\classes.jar.zip
  3. 从zip中逐个删除类,然后返回第2步,直到异常消失

为了加快该过程,我将大量文件删除以缩小到该软件包,然后缩小到导致D8失败的确切文件。

事实证明,这是以下代码(我正在使用com.annimon.stream.Stream):

Stream.of(SOME_MAP).map(Map.Entry::getValue).findFirst().orElse(null);

其中SOME_MAPHashMap<String, String[]>,要使用的解决方法

Stream.of(SOME_MAP).map(entry -> entry.getValue()).findFirst().orElse(null);