Desugaring 与 Multidex
给旧设备写 app 时遇到一个问题,在重写的 Application 类里使用 Java 8 特性会在运行时报错找不到类,而在其他地方使用都没问题。
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: $r8$backportedMethods$utility$Objects$2$equals
at MyApplication.onCreate(MyApplication.java:xx)
排查了一圈才发现是 multidex 惹的祸,由于执行 attachBaseContext() 需要先加载 MyApplication 类,此时 multidex 还没来得及安装,所以 MyApplication 里不能调用主 DEX 文件中不存在的类。
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
参考资料
https://developer.android.com/studio/write/java8-support#library-desugaring
https://developer.android.com/studio/build/multidex