8

我有一個啓用了Proguard(minifyenabled true)的應用程序,最近在Google Play開發控制檯中收到了崩潰報告。當我看着它,我看到 如下:Google Play開發者控制檯顯示Stacktrace中的類和方法名稱

enter image description here

我很驚訝地看到第1行中完整的類和方法的名稱,如Proguard的啓用。我一直以前看到這樣的事情:

在com.myname.myapp.cf(來源不明)

我也很好奇如何爲我不是行號出現在我的Proguard配置文件中保留行號(因此,爲什麼我通常在我的堆棧跟蹤中看到「未知源」)。

我反編譯了我的.apk文件,在classes.dex文件中窺視了一下,看起來一切正常。我找到了堆棧跟蹤第1行中引用的類,並且類名確實是混淆的,方法名也是如此。

現在,'MyActivity'(stacktrace的第2行)是我的應用程序的啓動Activity,並且在Manifest中聲明,所以我明白爲什麼它的名稱沒有被混淆,並且'onConnected'方法是不是我的方法(它來自Google Play遊戲服務),因此,這也是可以的。

'MyMethodName' 從稱爲內 onConnected像這樣:

@Override 
public void onConnected(Bundle arg0) { 
    myClassObject.myMethodName();  //Where myClassObject is an instance of MyClassName 
} 

調試設置爲禁用在我的build.gradle文件。

我沒有將mapping.txt文件上傳到Play控制檯,我手動運行回溯以查看我的去混淆堆棧跟蹤。

如果有人能幫助我理解爲什麼我在這裏看到我的完整課程和方法名稱,我將不勝感激。我可以/應該做些什麼來防止這種情況發生?

+0

MyClassName是一個Activity類嗎?您是否使用默認的「ProGuard」規則? –

回答

3

折騰在這星期後,我終於發現了原因......

就夠了,說,我的發佈程序是完全混淆 - 這些去混淆堆棧跟蹤信息是從我自己的測試裝置未來!

是的,我自己的測試設備直接通過Android Studio運行應用程序和無符號。 (出於顯而易見的原因,我沒有在我的調試版本上啓用ProGuard)。

我用於測試此應用程序的設備不是「主流」設備,在Dev Consol中出現的「名稱」與設備的實際名稱不相似,所以我沒有馬上注意到。我相當肯定這在過去從未發生過(至今我還沒有看到過) - 爲什麼任何人都希望他們的調試版本中的崩潰報告隨着生成構建崩潰一起出現在開發控制檯中,我不知道。

因此,如果有人看到這個問題,請檢查它不是你自己的調試版本,導致堆棧跟蹤在其他任何事情之前涌入!

-2

我沒有將mapping.txt文件上傳到Play控制檯,我手動運行回溯 以查看我的去混淆堆棧跟蹤。

然後,您可能想要將mapping.txt添加到谷歌播放,這將確保您的包和類名稱被混淆。

+0

這是不正確的 - 上傳mappings.txt,以便您可以直接在開發人員控制檯中查看去混淆堆棧跟蹤,而無需手動使用像回溯這樣的工具。它與保持混淆無關。恰恰相反。請參閱:https://support.google.com/googleplay/android-developer/answer/6295281?hl = zh_CN – Zippy

相關問題