3

Java8 の機能を活用するために、Android アプリの Jack コンパイラに切り替えました。ただし、縮小化 ( minifyEnabled true) を有効にすると、一見ランダムな場所でアプリがクラッシュすることがわかりました (古い javac+proguard+dex ではすべて正常に動作していました)。

時間を節約するために縮小化を無効にすることにしましたが、現在発生している問題は、エラー報告ライブラリがすべてのコールスタックを不明な行番号として報告することです。また、同じ壊れたスタック トレースが得られることも確認しました。Log.getStackTraceString

例えば

com.foo.android.bar: XXX
 at com.foo.android.bar.quax(Unknown Source)

コールスタックを元に戻す唯一の方法は、debug ( debuggable true) を有効にすることですが、そのようにアプリをストアに送信することはできません。

何か案は?

4

1 に答える 1

1

Gradle プラグインが Jack を次のように駆動することがわかりました。

if debugbuild ソース + 行情報を保持する
ifnon-debugすべてのソース + 行情報を削除する

これを回避するには、Jack にソース/行情報を (gradle ファイルで) 保持するように明示的に要求できます。

jackOptions {
    enabled true
    additionalParameters(
        "jack.dex.debug.lines": "true",
        "jack.dex.debug.source": "true")
}

注: 引数の値は文字列でなければなりません!

Jack がサポートするすべての有効なパラメータを次のように取得できます。

java -jar <SDK>/build-tools/<build-tools-version>/jack.jar --help-properties

いくつかの詳細情報 ( https://code.google.com/p/android/issues/detail?id=228093 )

于 2016-11-18T23:08:12.333 に答える