Деобфускацирующий файл не работает с этим исключением
Я загрузил файл deobfuscate в консоль, но... кажется, что файлы deobfuscate некорректно работают с этим исключением. Я запутываю код с новой системой R8 вместо Proguard, потому что я использую последнюю андроид-студию, но это также случалось и раньше с 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)
Как вы можете видеть, он не говорит, в какой строке или функции есть проблема, вместо этого он говорит "at, or, at или" и не разъясняет, где происходит сбой.
Как я могу решить эту проблему?
1 ответ
Когда номера строк удаляются из метаданных, трассировки стека не будут включать их, что может затруднить определение места возникновения проблемы. Можете добавить --keepattributes LineNumberTable
к вашей конфигурации R8, чтобы сохранить их.
К сожалению, это не поможет вашей текущей ситуации. В этом случае я бы рекомендовал начать с:
com.myapp.SystemInfoStringBuilder.getSystemSummaryList
и определить, вызывает ли это:
com.myapp.SystemInfoHelper.getExternalSdCardTotalSize
или же
com.myapp.SystemInfoHelper.getFormattedExternalSdCardSize
Если он вызывает оба (основываясь на именах, которые он, вероятно, делает), следующий шаг становится немного более обременительным.
Из этого метода определите, какой из com.myapp.Util
Методы называются. Обратите внимание, что вы также можете удалить некоторые из длинного списка com.myapp.Util
методы, исследующие код, чтобы определить, будут ли они фактически генерировать исключение NullPointerException.
Последний вариант заключается в кодировании на Kotlin, потому что это заставит вас явно разрешить нулевые значения для данной переменной или параметра.