混淆注意事項

 從SDK2.3開始在android-sdk-windows\tools\下面多了一個proguard文件夾,proguard是一個java代碼混淆的工具,不過代碼混淆不能混淆xml的佈局文件,混淆的是JAVA文件。java

    1、在eclipse中,android 2.3開始支持這個功能;android

    2、另外一種是使用腳本如ant windows

混淆器經過刪除從未用過的代碼和使用晦澀名字重命名類、字段和方法,對代碼進行壓縮,優化和混淆。app

 

      1、默認混淆文件 proguard.cfg文件, google默認不混淆 Activity Service ... 類的 子類, 全部 activity 的子類 名稱是被保留的。讓proguard.cfg起做用的作法很簡單,就是在eclipse自動生成的default.properties文件中加上一句「proguard.config=proguard.cfg」就能夠了eclipse

      混淆中保留了繼承自ActivityServiceApplicationBroadcastReceiverContentProvider等基本組件以及com.android.vending.licensing.ILicensingService並保留了全部的Native變量名及類名,全部類中部分以設定了固定參數格式的構造函數,枚舉等等。ide

     2android sdk目錄在帶有空格的目錄名稱的子目錄下沒法混淆  去掉空格就行了函數

     3、依賴包混淆帶來的麻煩,最好所有保留不混淆。例如工具

     -keep class com.badlogic.** { *; }佈局

     -keep class * implements com.badlogic.gdx.utils.Json*優化

     -keep class com.google.** { *; }

     4. jni反調java方法

      這些類或方法一樣可能會被proguard認爲沒有調用過而被除掉, 或都被更名. 這些方法最好統一寫在一個類中, 而後這個類不做優化, 或是找出全部jni調用過的類與方法, proguard.cfg中配置, 不對它們做優化

     5. 其它反射調用的java類與方法

      使用反射時必定要注意proguard可能會認爲那些方法未被調用過, 會在代碼優化過程當中將它們更名或除去. 在使用反射的地方必定要在proguard.cfg中配置, 不優化反射調用過的類和方法。

比較常見的是寫在視圖xml中的onClick響應出錯. 由於寫在xml中的onClick是經過反射調用的, proguard認爲它們沒有在代碼中被調用過, 因此將它們從代碼中除掉或更名了.

解決方法:在proguard.cfg中添加如下代碼, 就能夠防止被配在視圖xml中的onClick方法被proguard優化掉。

-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}

 咱們公司目前的批量打包腳本注意事項:

     7 若是是引用第三方jar應注意查看jar包裏是否有assets資源文件夾若是有應用將assets文件夾中的資源copy到項目中的assets文件夾下這樣混淆後纔不會出錯proguard優化事後會產生一些文件

dump.txt  描述.apk文件中全部類文件間的內部結構

     8   客戶端利用友盟的分享功能作第三方分享,但客戶端混淆打包後,分享功能會報一些resource找不到的問題。這是由於友盟分享功能會用反射的方法去找本身須要的資源文件。被混淆後固然報錯。

解決方式: 能夠在混淆配置文件中添加:

-keep class **.R$* {
 *;
}

mapping.txt  列出了原始的類,方法和字段名與混淆後代碼間的映射。這個文件很重要,當你從release版本中收到一個bug報告時,能夠用它來翻譯被混淆的代碼。

對應公司裏產生的.map文件

seeds.txt  列出了未被混淆的類和成員

usage.txt  列出了從.apk中刪除的代碼

相關文章
相關標籤/搜索