AndroidStudio下ProGuard混淆打包

繼前一篇筆記ProGuard基礎語法和打包配置總結了一些打包混淆須要注意的地方。這幾天忙着新項目的上線,切換到AndroidStudio下開發後,須要寫一下gradle的打包腳本,由於是新項目,也須要從新寫一下混淆配置文件。結果碰到了下面一個問題混淆打包的時候移除打log的代碼的配置不成功。前一篇筆記說過,打包的時候作了以下的配置就能夠移除工程裏面的log,避免打包發佈後的一些問題.java

-assumenosideeffects class android.util.Log{     public static int v(...);     public static int i(...);     public static int d(...);     public static int w(...);     public static int e(...); } -assumenosideeffects class java.io.PrintStream{     public void println(%);     public void println(**); }

結果在自定義的混淆文件下,搗騰了好久發現一點效果都木有,鬱悶了好久,莫非ProGuard的這些處理已經失效了?腦子裏盡是大問號,Google了好久也沒有發現什麼線索,索性就先丟了一邊。可是做爲一個強迫症程序員,過幾天又想起了這個問題,有空便索性研究琢磨一下,還真的找到問題的所在,順利的解決了。android

問題出在哪?

思前想後,發現Google了好久都沒有因此然,有溜達去ProGuard的官網看了一下語法,也沒有說起廢棄到上面那種優化方式。那麼,基本能夠判定是我本身的配置出了問題。但我仔細檢查了本身的配置,發現並沒有異樣,網上說起到的這種優化方式的失效的狀況,也只有在混淆文件配置了git

  • -dontoptimize(顧名思義,don't optimize 不優化)程序員

的時候纔回致使失效,但是問題我壓根本身的配置文件並無配這個啊啊啊啊啊啊啊!額,腦子一轉,不對,我用gradle來打包的,AndroidStudio生成build.gradle打包文件的時候,就指定了一個默認的的混淆文件proguard-android.txt(在 SDK目錄/tools/proguard/ 目錄下面)另一個讓咱們自行添加混淆規則的proguard-rules.pro文件就在咱們寫代碼的moudle目錄下面。github

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

如此一來,本身寫的proguard-rules.pro裏面沒問題,那麼基本是在proguard-android.txt裏面出了問題,索性直接打開那個文件看看,果不其然,看到了下面的兩行混淆配置算法

-dontoptimize -dontpreverify

這樣就能明白本身去除log的代碼失效的緣由了。哈哈,找到罪魁禍首後,直接把這個配置去掉就ok了,雞凍得趕忙從新打包享受勝利的果實。結果打包到了一半,媽蛋,直接報錯終止了。ide

去了-dontoptimize還不行

額,開了很久,發現被打回原點。no,還達不到原點,連打包都打不了。是否是還要什麼地方須要改動呢,後來當天沒想到什麼好方法,索性隔了一天再回來搗騰,又發現了一些問題,在sdk自帶的配置混淆文件的目錄下,有着三個混淆的配置文件工具

  • proguard-android.txt開發工具

  • proguard-android-optimize.txtgradle

  • proguard-project.txt

打開以前的proguard-android.txt看到了下面這段註釋

-dontoptimize -dontpreverify # Note that if you want to enable optimization, you cannot just # include optimization flags in your own project configuration file; # instead you will need to point to the # "proguard-android-optimize.txt" file instead of this one from your # project.properties file.

哈哈,這回真是如夢初醒啊啊啊啊啊啊!,趕忙把gradle裏面的系統混淆配置文件改爲proguard-android-optimize.txt,再搭上本身寫的那份混淆文件一塊兒打包,過了一會搞定,終於打出一個我想要的混淆包出來了

總結

仔細的去看了一下proguard-android.txtproguard-android-optimize.txt的區別,其實主要的問題是出如今了少了下面的這段配置

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* -optimizationpasses 5 -allowaccessmodification -dontpreverify # The remainder of this file is identical to the non-optimized version # of the Proguard configuration file (except that the other file has # flags to turn off optimization). -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -verbose

打包加入優化須要指定優化等級和優化策略算法的一些配置等等,由於去了-dontoptimize後沒有配置上面這些,所致使連包都打不了了。

另外,instead you will need to point to the "proguard-android-optimize.txt" file instead of this one from your project.properties file.這提示實際上是舊的開發工具ADT下面的提示而已,由於ADT下混淆配置是在project.properties指定。換成AndroidStudio開發的話,去build.gradle的構建腳本中配置就行了,以下

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

囉裏吧嗦又一篇,與君分享,不喜勿噴。。哈哈

相關文章
相關標籤/搜索