我在Android Studio项目中使用commons-io依赖项。
implementation 'commons-io:commons-io:2.11.0'
但我在Crashlytics看到了这些奇怪的崩溃。这些崩溃出现在Android 7及以下版本上。
Fatal Exception: java.lang.NoSuchMethodError: No static method withInitial(Ljava/util/function/Supplier;)Ljava/lang/ThreadLocal; in class Ljava/lang/ThreadLocal; or its super classes (declaration of 'java.lang.ThreadLocal' appears in /system/framework/core-oj.jar)
at org.apache.commons.io.IOUtils.<clinit>(IOUtils.java:183)
at org.apache.commons.io.IOUtils.closeQuietly(IOUtils.java:534)
我的项目中还包含了Java 8兼容性。
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
您可以将库降级到版本"2.8.0",因为在此版本之后,他们使用的是android 7不支持的ThreadLocal。
所以只需在app/build.gradle 中使用即可
implementation 'commons-io:commons-io:2.8.0'
内部公共-io使用ThreadLocal#withInitial API,这不是去库存库的一部分,因此该方法在低于26(Android OREO(的API级别上不可用
要阅读更多关于这方面的内容,你可以在谷歌问题跟踪器上阅读这个帖子的讨论。
解决方案:
我们可以使用commons-io的早期版本,这些版本不使用ThreadLocal API。所以我最终使用了implementation 'commons-io:commons-io:2.5'