2016-04-08 50 views
1

我想在Android中運行調試器,但是我的問題是在調試版本中我有proguard。原因是65K的方法極限。我打開了proguard來幫助減少這些方法。這讓我回到43K方法,但現在在IDE中,我無法通過代碼進行調試,因爲IDE中的所有斷點都會變成紅色的X,並帶有錯誤,表示無法訪問的代碼。如果我關閉調試器,斷點將恢復正常。在構建gradle proguard中需要做些什麼才能使這個工作起作用,還是我剛剛被徹底解決?在Android Studio中使用Proguard運行Debbuger在

buildTypes { 
    debug { 
     debuggable true 
     minifyEnabled true 
     shrinkResources false 
     zipAlignEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' 
     signingConfig signingConfigs.debug 
    } 
    release { 
     minifyEnabled true 
     shrinkResources true 
     signingConfig signingConfigs.release 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-samsung.txt' 
    } 
} 
+0

你有任何未使用的庫?你的依賴是什麼?你能剝離一些你的庫中未使用的部分嗎?想幫助你縮小尺寸! – ApolloSoftware

+0

很多第三方的東西都是無用的東西,儘可能長時間地減少我們現在正在靠牆的時候。 – JPM

+0

我們遇到了同樣的問題。我們發送方法數超過65K的罪魁禍首是谷歌播放。我們實際上不得不使用較舊版本的Google Play build(使用較少的絨毛),它使我們低於閾值。您可能必須將APK分解爲幾個獨立的模塊化組件。 – ApolloSoftware

回答

2

您的ProGuard配置可能會遺漏一些子句。

我猜你需要這樣的:

-keepattributes SourceFile,LineNumberTable 

它將會繼續(顧名思義)的源文件和行號表的名稱。實際上,這個子句也應該用於發佈,因爲如果沒有它,你無法毫不含糊地去混淆堆棧跟蹤。

進行調試它的好,有這樣的額外條款:

-keepattributes LocalVariableTable,LocalVariableTypeTable 

這將令本地變量名。

或者,您也可以考慮使用這些條款(代替或除上述條款)進行調試:

-dontoptimize 
-dontobfuscate 
相關問題