只有部分用户报告“找不到资源”错误。这有意义吗?

2022-09-01 05:44:43

我看到Crittercism(崩溃报告服务)上出现了一些错误,用于我发布的Android应用程序。跟踪如下:

0   java.io.IOException: Resource not found: "org/joda/time/tz/data/ZoneInfoMap" ClassLoader: dalvik.system.PathClassLoader@45908320
1    at org.joda.time.tz.ZoneInfoProvider.openResource(ZoneInfoProvider.java:211)
2    at org.joda.time.tz.ZoneInfoProvider.<init>(ZoneInfoProvider.java:123)
3    at org.joda.time.tz.ZoneInfoProvider.<init>(ZoneInfoProvider.java:82)
4    at org.joda.time.DateTimeZone.getDefaultProvider(DateTimeZone.java:462)
5    at org.joda.time.DateTimeZone.setProvider0(DateTimeZone.java:416)
6    at org.joda.time.DateTimeZone.<clinit>(DateTimeZone.java:115)
7    at org.joda.time.chrono.GregorianChronology.<clinit>(GregorianChronology.java:71)
8    at org.joda.time.chrono.ISOChronology.<clinit>(ISOChronology.java:66)
9    at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:61)
10   at org.joda.time.DateTime.<init>(DateTime.java:155)

搜索显示这通常是一个编译问题(通常是Joda时间库没有添加到构建路径或其他什么),但是为什么几千个用户中只有大约4个用户看到这个错误?

我唯一的猜测是,有人试图反编译应用程序以盗版它(这是一个相当受欢迎的付费应用程序),并在他们错误地重新编译时看到此错误。在这种情况下,我很高兴他们看到错误,我不需要担心这一点。

另一个奇怪的事情是,导致问题的代码被一个try/catch包围着,这似乎并没有抓住它:

try {
    DateTime dt = new DateTime();
    DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
    return fmt.print(dt);
} catch (Exception e) {
    //Report issue to Analytics service
} 

在我看来,这使得这个错误似乎更不可能出现在Crittercism上,因为它应该被抓住。谁能解释一下?


答案 1

如果您错过了初始化,可能会发生这种情况:

JodaTimeAndroid.init(this);

答案 2

不是崩溃,而是在单元测试中,当我使用joda-time-android调用类时,我看到相同的错误消息java.io.IOException: Resource not found: "org/joda/time/tz/data/ZoneInfoMap"DateTimeFormatter

joda-time java 依赖项添加到测试源代码集将修复单元测试中的错误

testImplementation "joda-time:joda-time:$latestVersion"


推荐