Android代碼混淆的寫法總結
Apk文件被反編譯出來能被獲取到里面的代碼。對于這種情況,我們可以對項目代碼進行混淆,隨機生成難理解的類名,方法名,讓代碼難以閱讀,加大功能被盜取的難度?;煜梢云鸬綁嚎sApk,混淆文件,預檢,優(yōu)化的作用。
1. 使用方式,在gradle文件中設置minifyEnabled為true即可開啟混淆
buildTypes {
release {
minifyEnabled ture //是否開啟代碼混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
混淆內容在proguard-android.txt文件中寫。
2. 混淆設置參數(shù)
-optimizationpasses 4 代碼混淆的壓縮比例,值介于0-7
-dontusemixedcaseclassnames 混淆后類型都為小寫
-dontskipnonpubliclibraryclasses 不去忽略非公共的庫類
-dontoptimize 不優(yōu)化輸入的類文件
-dontpreverify 不做預校驗的操作
-ignorewarnings 忽略警告
-verbose 混淆時是否記錄日志
-keepattributes Annotation 保護注解
-printmapping proguardMapping.txt 生成原類名和混淆后的類名的映射文件
-optimizations !code/simplification/cast,!field/ ,!class/merging/ 指定混淆是采用的算法
3. 保持不被混淆的設置
保持實體類不混淆
-keep class 你的實體類所在的包.** { *; }
保持四大組件,Application,F(xiàn)ragment不混淆
-keep public class * extends android.app.Application -keep public class * extends android.app.Activity -keep public class * extends android.app.Fragment -keep public class * extends android.support.v4.app.Fragment -keep public class * extends android.app.Fragment -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.preference.Preference
保持 native 方法不被混淆
-keepclasseswithmembernames class * {
native <methods>;
}
保持枚舉enum類不被混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
保持第三方包不混淆,比如這里用到微信、支付寶支付第三方
#支付寶混淆
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
#微信支付混淆
-keep class com.tencent.mm.opensdk.** {*;}
-keep class com.tencent.wxop.** {*;}
-keep class com.tencent.mm.sdk.** {*;}
4. 完整混淆示例:
#指定代碼的壓縮級別
-optimizationpasses 5
#包名不混合大小寫
-dontusemixedcaseclassnames
#不去忽略非公共的庫類
-dontskipnonpubliclibraryclasses
#優(yōu)化 不優(yōu)化輸入的類文件
-dontoptimize
#預校驗
-dontpreverify
#混淆時是否記錄日志
-verbose
#忽略警告
-ignorewarning
#保護注解
-keepattributes *Annotation*
-keep public class * extends android.app.Application
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
-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.preference.Preference
-keepclasseswithmembernames class * {
native <methods>;
}
-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 *;
}
-keepclassmembers class **.R$* {
*;
}
-keep class * extends android.view.View{*;}
-keep class * extends android.app.Dialog{*;}
-keep class * implements java.io.Serializable{*;}
#butterknife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
#volley
-dontwarn com.android.volley.**
-keep class com.android.volley.**{*;}
#fastjson
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.**{*;}
#happy-dns
-dontwarn com.qiniu.android.dns.**
-keep class com.qiniu.android.dns.**{*;}
#okhttp
-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.**{*;}
-keep class okio.**{*;}
-keep class android.net.**{*;}
-keep class com.android.internal.http.multipart.**{*;}
-keep class org.apache.**{*;}
-keep class com.qiniu.android.**{*;}
-keep class android.support.annotation.**{*;}
-keep class com.squareup.wire.**{*;}
-keep class com.ant.liao.**{*;}
#騰訊
-keep class com.tencent.**{*;}
-keep class u.aly.**{*;}
#ImageLoader
-keep class com.nostra13.universalimageloader.**{*;}
#友盟
-dontwarn com.umeng.**
-keep class com.umeng.**{*;}
#pulltorefresh
-keep class com.handmark.pulltorefresh.** { *; }
-keep class android.support.v4.** { *;}
-keep public class * extends android.support.v4.**{
public protected *;}
-keep class android.support.v7.** {*;}
自己試著用一個簡單的項目加入混淆,打個包試試效果吧。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android實現(xiàn)在列表List中顯示半透明小窗體效果的控件用法詳解
這篇文章主要介紹了Android實現(xiàn)在列表List中顯示半透明小窗體效果的控件用法,結合實例形式分析了Android半透明提示框的實現(xiàn)與設置技巧,需要的朋友可以參考下2016-06-06
ionic App 解決android端在真機上tab處于頂部的問題
這篇文章主要介紹了ionic App 解決android端在真機上tab處于頂部的問題的相關資料,需要的朋友可以參考下2017-06-06
Android實現(xiàn)圖片點擊預覽效果(zoom動畫)
本文主要介紹了Android實現(xiàn)圖片點擊預覽效果的方法步驟。具有很好的參考價值,下面跟著小編一起來看下吧2017-03-03
Android 利用反射+try catch實現(xiàn)sdk按需引入依賴庫的方法
這篇文章主要介紹了Android 利用反射+try catch來實現(xiàn)sdk按需引入依賴庫,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
Android ShimmerLayout實現(xiàn)微光效果解析
這篇文章主要為大家詳細介紹了Android ShimmerLayout實現(xiàn)微光效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03

