天天看點

android apk 代碼混淆總體上有以下幾個原則:

總體上有以下幾個原則:

1.四大元件以及自定義的View不要混淆;      
2.第三方jar包不要混淆;      
3.實體類不要混淆;      
4.用到反射的地方不要混淆;
      
這裡說說第三方jar包, 怎麼不混淆第三方jar 包, 很簡單,       
直接開jar包, 看它的包名, 如pinyin4j.jar, 它一共有三個包,
com.hp.hpl.sparta,net.sourceforge.pinyin4j, demo

那們把這三個包-kepp 不進行混淆,并dontwarn 即可。
-keep class com.hp.hpl.sparta.** {*; }
-dontwarn com.hp.hpl.sparta.**
-keep class net.sourceforge.pinyin4j.** {*; }
-dontwarn net.sourceforge.pinyin4j.**
-keep class demo.** { *;}
-dontwarn demo.**

      
下面是我的工程進行代碼混淆的proguard.cfg      
# 混淆通用設定
-optimizationpasses 5                                                           # 指定代碼的壓縮級别
-dontusemixedcaseclassnames                                                     # 是否使用大小寫混合
-dontskipnonpubliclibraryclasses                                                # 是否混淆第三方jar
-dontpreverify                                                                  # 混淆時是否做預校驗
-verbose                                                                        # 混淆時是否記錄日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*        # 混淆時所采用的算法

# 工程定制的不需混淆的内容, 實體類不能混淆
-keep public class * extends net.easyconn.carman.common.httpapi.base.BaseRequest{*;}
-keep public class * extends net.easyconn.carman.common.httpapi.base.BaseResponse{*;}

# xUitl DbUtils 用到的實體類不能混淆
-keep class net.easyconn.carman.thirdapp.AppInfo{*;}
-keep class net.easyconn.carman.navi.route.model.RecordPath{*;}

# 工程裡的其它幾個工具包不必混淆
-keep class com.lidroid.xutils.** {*; }
-dontwarn com.lidroid.xutils.**
-keepattributes *Annotation*                                                   #xUtils 注解
-keep class * extends java.lang.annotation.Annotation { *; }                   #xUtils 注解

############################### 引用 android framework api 不用混淆,  通用寫法 begin #####################################
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class * extends android.support.v4.**{*;}
-keep interface android.support.v4.app.** { *; }
#-keep public class * extends android.widget.**{*;}

# R  檔案不混淆
-keep class **.R$* {*;}
-keep class **.R{*;}
-dontwarn **.R$*

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
############################### 通用 END #####################################

#重寫的高德的類不混淆
#-keep class _RouteOverLay
#-keep class NaviControl
#-keep class NaviIconControl

# 訊飛語音: Msc.jar see http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=5877&highlight=%E6%B7%B7%E6%B7%86
# 訊飛也用到了xUtils, 也需要 -keepattributes *Annotation*, 為統一格式, 提到Xtils處。
-dontwarn com.iflytek.**
-keepattributes Signature
-keep class com.iflytek.**{*;}

#################高德, 參考 高德官方 demo begin #############################
# As described in tools/proguard/examples/android.pro - ignore all warnings.
-dontwarn android.support.v4.**
#如果有其它包有warning,在報出warning的包加入下面類似的-dontwarn 報名
-dontwarn com.amap.api.**
-dontwarn com.aps.**
-dontwarn com.autonavi.**
#高德相關混淆檔案
#3D 地圖
-keep class com.amap.api.maps.**{*;}
-keep class com.amap.api.mapcore.**{*;}
-keep class com.autonavi.amap.mapcore.*{*;}
#Location
-keep class com.amap.api.location.**{*;}
-keep class com.aps.**{*;}
#Service
-keep class com.amap.api.services.**{*;}
#navi
-keep class com.amap.api.navi.**{*;}
-keep class com.autonavi.** {*; }
#2D地圖
#-keep class com.amap.api.maps2d.**{*;}
#-keep class com.amap.api.mapcore2d.**{*;}
#################高德, 參考 高德官方 demo end #############################


############################shareSDK begin #######################
-keep class android.net.http.SslError
-keep class android.webkit.**{*;}
-keep class cn.sharesdk.**{*;}
#-keep class com.sina.**{*;}
-keep class m.framework.**{*;}
-dontwarn cn.sharesdk.**
############################shareSDK end #######################

########################### 以下為第三方jar 包######################
# 方法:
# 直接打開jar, 将包中的所有package 都不混淆, -keep pacagename.**{*;}
# 同時忽略警告 -dontwarn pacagename.**

# android-async-http
-keep class com.loopj.**{*;}
-dontwarn com.loopj.**

#enventbus
-keep class de.greenrobot.event.** { *;}
-dontwarn de.greenrobot.event.**

#fastjson
-keep class com.alibaba.fastjson.** {*; }
-dontwarn com.alibaba.fastjson.**

#java-websocket
-keep class org.java_websocket.** {*; }
-dontwarn org.java_websocket.**

-keep class com.ijlytek.** {*; }
-dontwarn com.ijlytek.**

#pinyin4java
-keep class com.hp.hpl.sparta.** {*; }
-dontwarn com.hp.hpl.sparta.**
-keep class net.sourceforge.pinyin4j.** {*; }
-dontwarn net.sourceforge.pinyin4j.**
-keep class demo.** { *;}
-dontwarn demo.**

#prettytime
-keep class org.ocpsoft.prettytime.** {*; }
-dontwarn org.ocpsoft.prettytime.**


#smssdk
-keep class cn.smssdk.** {*; }
-dontwarn cn.smssdk.**

#universal-image-loader
-keep class com.nostra13.** {*; }
-dontwarn com.nostra13.**

#avos
-keep class com.avos.** {*; }
-dontwarn com.avos.**

#androidannotation
-keep class com.sun.codemodel.** {*; }
-dontwarn com.sun.codemodel.**
-keep class org.androidannotations.** {*; }
-dontwarn org.androidannotations.**

#################################### 第三方jar 包 ##########################################