Деобфускацирующий файл не работает с этим исключением - PullRequest
1 голос
/ 24 мая 2019

Я загрузил файл 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)

Как вы можете видеть, он не указал, в какой строке или функции проблема, вместо этого онскажите «на, или, на, или» и не уточняете, где происходит сбой.

Как я могу решить эту проблему?

1 Ответ

1 голос
/ 24 мая 2019

Когда номера строк удаляются из метаданных, трассировки стека не будут включать их, что может затруднить определение места возникновения проблемы.Вы можете добавить --keepattributes LineNumberTable в конфигурацию R8, чтобы сохранить их.

К сожалению, это не поможет вашей текущей ситуации.В этом случае я бы рекомендовал начать с:

com.myapp.SystemInfoStringBuilder.getSystemSummaryList

и определить, вызывает ли это:

com.myapp.SystemInfoHelper.getExternalSdCardTotalSize

или

com.myapp.SystemInfoHelper.getFormattedExternalSdCardSize

Если он вызывает оба (основываясь на именах, которые он, вероятно, делает), следующий шаг становится немного более обременительным.

Из этого метода определите, какой из com.myapp.UtilМетоды называются.Обратите внимание, что вы также можете исключить некоторые из длинного списка методов com.myapp.Util, исследуя код, чтобы определить, действительно ли они генерируют исключение NullPointerException.

Последний вариант - код в Kotlin.потому что это заставит вас явно разрешить нулевые значения для данной переменной или параметра.

...