Без номеров строк (например, для 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)

Другие вопросы по тегам