Throwable (). GetStackTrace () [0] .getLineNumber () скрыт proguard - PullRequest
0 голосов
/ 29 октября 2018

Перед Proguard с:

Throwable().getStackTrace()[0].getLineNumber();

Я получил:

482

После Proguard я получил:

41

Что явно не так.

Вот проверенные правила для решения этой проблемы:

-keep class java.lang.StackElement
-keepattributes StackTraceElement
-keepattributes SourceFile,LineNumberTable
-keepattributes Signature
-keepattributes InnerClasses,EnclosingMethod
-keepattributes getStackTrace

Но это не работает. Существуют ли какие-либо конкретные правила, позволяющие корректно работать с этим фрагментом кода?

1 Ответ

0 голосов
/ 29 октября 2018

Согласно руководству , вам необходимо сделать следующее:

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

и вам нужно использовать -printmapping, чтобы сохранить сопоставления, чтобы потом можно было декодировать запутанные трассировки стека.

Я должен отметить, что ссылки на классы и методы в стандартной библиотеке классов всегда будут сохраняться, поскольку они необходимы при загрузке вашего кода. Поэтому этот «-охранитель» излишен:

-keep class java.lang.StackElement

И вы также говорите Proguard оставить атрибуты под названием «StackTraceElement» и «getStackTrace», которые не существуют. Список поддерживаемых атрибутов задокументирован здесь

Смотри также:

...