Android混淆代碼錯誤堆棧還原

前言

相信做過app的同學對代碼混淆應該不陌生吧,如果陌生就自行百度,這里不做普及。我們先思考一個問題,如果我們把代碼混淆了,如果出錯了怎么定位問題?答案非常簡單,只要稍微實踐下你就明白了,下面就是給你整理的對混淆代碼錯誤堆棧還原的方法。

如何混淆?

Android Studio實現混淆很簡單,只需要在build.gradle進行如下配置即可:

 buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

這個是在發布模式下去混淆代碼的,如果想在調試模式下混淆代碼,就增加一個debug的配置即可:

debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

mapping.txt文件

mapping文件是我們要實現混淆代碼還原必須要關注的一個文件,它里面存放著源碼到混淆之后的代碼的映射信息,這個文件是在我們執行proguard之后產生的,產生的位置如下圖所示:

15432fc6af33d8f8de08f2a3bf3f206e1472473988.png

制造一個混淆代碼的Crash

1472473903_74_w583_h352.png
1472473911_11_w538_h261.png

啟動MainActivity的時候就會直接Crash并拋出以下異常:

1472473919_91_w742_h337.png

是不是發現出錯的堆棧完全看不懂呢,如果你不會還原的話,你可能根本就定位不到出錯的位置。

怎么還原?

一個字,簡單。利用SDK給我提供的工具就可以,大家要有一顆發現美的眼睛啊,SDK提供了很多有用的工具哦。我們來到sdk/tools/proguard/bin目錄下,會發現三個bat文件:

1472473927_49_w152_h103.png

我們直接雙擊打開proguardgui.bat文件,通過gui來完成我們的還原工作:

1472473955_78_w1002_h780.png

哇,好神奇啊,竟然被還原了。但是你有沒有發現,那個Unknown Source還在,根本不知道出錯行在哪,怎么辦?先思考下為什么會出現Unknown Source?原因是我們在Proguard的時候沒有保留源文件名及行號,所以我們只需要在proguard-rules.pro文件增加以下配置:

-keepattributes SourceFile,LineNumberTable

然后我們再次編譯源碼,再還原一次:

1472473965_26_w1003_h780.png

完美!

總結

是不是發現總有些自己講不清楚說明白的東西?我們獲取知識都是先從問為什么開始,本篇文章講的只是開發中的一個解決問題的技巧,但你想想如果有很多這種混淆的異常,難道你要一個一個去看,拜托太低效啦。下篇告訴你如果通過Bugly配置Mapping文件,實現線上堆棧還原,讓你解決問題的速度變得杠杠的。最后,送個雞湯:程序員是為解決問題而存在的,而不是為了解決編程問題,你的價值取決于你能解決多少問題

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android混淆代碼錯誤堆棧還原 http://blog.csdn.net/wwj_748/article/de...
    格老子閱讀 397評論 0 0
  • 聲明 這篇文章更多的是做一個整理,內容來自于ProGuard官方文檔以及各種博客等,相關文章的鏈接在參考目錄里,感...
    夷陵小祖閱讀 3,708評論 0 23
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,349評論 25 708
  • 沒有你,我的個簽發給誰看,唉,不知道你是否明白,我所謂的個簽都是發給你看的,那都是我想說的話。只是不知道如何開口。...
    忠貞閱讀 75評論 0 1
  • 人都習慣性的去聽想聽到的、看想看到的,以至于其所隱含的東西不去進行思考。都說人生而自由,卻不知后一句:但無往不在枷...
    Mr黃_1792閱讀 915評論 0 0