Без номеров строк (например, для Log.getStackTraceString) с компилятором Jack
Мы перешли на компилятор Jack для нашего приложения для Android, чтобы использовать преимущества функций Java8. Однако, когда мы включили минификацию (minifyEnabled true
) мы видели, как наше приложение зависало в случайных местах (все работало нормально со старым javac+proguard+dex).
Чтобы сэкономить время, мы решили отключить минификацию, но теперь проблема, с которой мы сейчас сталкиваемся, заключается в том, что наша библиотека отчетов об ошибках сообщает обо всех стеках вызовов как о неизвестных номерах строк. Я также подтвердил, что мы получаем ту же трассировку битого стека с Log.getStackTraceString
Например
com.foo.android.bar: XXX
at com.foo.android.bar.quax(Unknown Source)
Единственное, что, похоже, возвращает нам наш стек вызовов, - это включить отладку (debuggable true
) но мы не можем отправить наше приложение таким образом в магазин.
Есть идеи?
1 ответ
Оказывается, плагин Gradle управляет Джеком следующим образом:
если debug
build keep source+line information
если non-debug
лишить всю информацию источника + линии
Чтобы обойти это, вы можете явно попросить Джека сохранить информацию об источнике / строке следующим образом (в вашем файле Gradle):
jackOptions {
enabled true
additionalParameters(
"jack.dex.debug.lines": "true",
"jack.dex.debug.source": "true")
}
Обратите внимание: значение аргумента ДОЛЖНО быть строкой!
Вы можете получить все допустимые параметры, которые поддерживает Джек следующим образом:
java -jar <SDK>/build-tools/<build-tools-version>/jack.jar --help-properties
дополнительная информация ( https://code.google.com/p/android/issues/detail?id=228093)