1

我将 deobfuscate 文件上传到控制台,但是... deobfuscate 文件似乎在此异常下无法正常工作。我使用新的 R8 系统而不是 proguard 来混淆代码,因为我使用的是最后一个 android studio,但这也发生在 proguard 之前。我可以在我的 google play 开发者控制台中看到很多异常,其中包含以下文本:

java.lang.NullPointerException: 
  at com.myapp.Util.capitalize (Util.java)
  or                     .clearRAM (Util.java)
  or                     .firstCharToUpperCase (Util.java)
  or                     .formatSize (Util.java)
  or                     .getBenchmarkResultsMap (Util.java)
  or                     .getColorFromStyle (Util.java)
  or                     .getLocaleStringResource (Util.java)
  or                     .getStringList (Util.java)
  or                     .goToAppSettingsDialog (Util.java)
  or                     .persistInt (Util.java)
  or                     .persistString (Util.java)
  or                     .persistStringArrayList (Util.java)
  or                     .sendEmail (Util.java)
  or                     .share (Util.java)
  at com.myapp.SystemInfoHelper.getExternalSdCardTotalSize (SystemInfoHelper.java)
  or                     .getFormattedExternalSdCardSize (SystemInfoHelper.java)
  at com.myapp.SystemInfoStringBuilder.getSystemSummaryList (SystemInfoStringBuilder.java)
  at com.myapp.activities.MainActivity$5$1.run (MainActivity.java)
  at android.os.Handler.handleCallback (Handler.java:739)
  at android.os.Handler.dispatchMessage (Handler.java:95)
  at android.os.Looper.loop (Looper.java:145)
  at android.app.ActivityThread.main (ActivityThread.java:6134)
  at java.lang.reflect.Method.invoke (Method.java)
  at java.lang.reflect.Method.invoke (Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1399)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1194)
  at de.robv.android.xposed.XposedBridge.main (XposedBridge.java:95)

如您所见,它没有说明问题出在哪一行或函数中,而是告诉“在,或,在,或”,而不是说明崩溃在哪里。

我怎么解决这个问题?

4

1 回答 1

1

当从元数据中删除行号时,堆栈跟踪将不包含它们,这会使查看问题发生的位置变得更加困难。您可以添加--keepattributes LineNumberTable到您的 R8 配置以保留这些。

不幸的是,这对您目前的情况没有帮助。在这种情况下,我建议从以下开始:

com.myapp.SystemInfoStringBuilder.getSystemSummaryList

并确定是否调用:

com.myapp.SystemInfoHelper.getExternalSdCardTotalSize

或者

com.myapp.SystemInfoHelper.getFormattedExternalSdCardSize

如果它同时调用两者(基于它可能使用的名称),下一步会变得更加繁琐。

从该方法确定com.myapp.Util调用了哪些方法。请注意,您还可以com.myapp.Util通过调查代码以确定它们是否真的会抛出 NullPointerException 来消除一些长长的 ' 方法列表。

最后一个选项是在 Kotlin 中编写代码,因为它会强制您明确允许给定变量或参数为空值。

于 2019-05-24T15:58:14.467 回答