日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Proguard 混淆之乱谈 3 混淆模板

發(fā)布時間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Proguard 混淆之乱谈 3 混淆模板 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

之前的文章談了沒有混淆的壞處Proguard 混淆之胡談1和混淆的用法Proguard 混淆之亂談2,沒看的童鞋可以看下。

#基礎(chǔ)部分混淆

####基礎(chǔ)混淆#### #指定代碼的壓縮級別 -optimizationpasses 5# 混淆時不使用大小寫混合,混淆后的類名為小寫 # windows大小寫不敏感,linux下可以不用添加 -dontusemixedcaseclassnames# 指定不去忽略非公共的庫的類 # 默認(rèn)跳過,有些情況下編寫的代碼與類庫中的類在同一個包下,并且持有包中內(nèi)容的引用,此時就需要加入此條聲明 -dontskipnonpubliclibraryclasses# 指定不去忽略非公共的庫的類的成員 -dontskipnonpubliclibraryclassmembers# 不做預(yù)檢驗,preverify是proguard的四個步驟之一 # Android不需要preverify,去掉這一步可以加快混淆速度 -dontpreverify# 混淆后生成映射文件 # 包含有類名->混淆后類名的映射關(guān)系 # 然后使用printmapping指定映射文件的名稱 -verbose -printmapping priguardMapping.txt# 指定混淆時采用的算法,后面的參數(shù)是一個過濾器 # 這個過濾器是谷歌推薦的算法,一般不改變 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*# 保護代碼中的Annotation不被混淆 # 這在JSON實體映射時非常重要,比如fastJson -keepattributes *Annotation*# 避免混淆泛型 # 這在JSON實體映射時非常重要,比如fastJson -keepattributes Signature# 拋出異常時保留代碼行號 -keepattributes SourceFile,LineNumberTable####基礎(chǔ)混淆 完成####

#應(yīng)用混淆部分

####針對應(yīng)用混淆##### 保留所有的本地native方法不被混淆 -keepclasseswithmembernames class * {native <methods>; }# 保留了繼承自Activity、Application這些類的子類 # 因為這些子類有可能被外部調(diào)用 # 比如第一行就保證了所有Activity的子類不要被混淆 -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 * extends android.view.View -keep public class com.android.vending.licensing.ILicensingService# 如果有引用android-support-v4.jar包,可以添加下面這行 -keep interface android.support.v4.app.** { *; } -keep class android.support.v4.** { *; } -keep class android.support.v7.** { *; } -keep public class * extends android.support.v4.** -keep public class * extends android.support.v7.** -keep public class * extends android.app.Fragment# 保留Activity中的方法參數(shù)是view的方法, # 從而我們在layout里面編寫onClick就不會影響 -keepclassmembers class * extends android.app.Activity {public void * (android.view.View); }# 枚舉類不能被混淆 -keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String); }# 保留自定義控件(繼承自View)不能被混淆 -keep public class * extends android.view.View {public <init>(android.content.Context);public <init>(android.content.Context, android.util.AttributeSet);public <init>(android.content.Context, android.util.AttributeSet, int);public void set*(***);*** get* (); }# 保留Parcelable序列化的類不能被混淆 -keep class * implements android.os.Parcelable{public static final android.os.Parcelable$Creator *; }# 保留Serializable 序列化的類不被混淆 -keepclassmembers class * implements java.io.Serializable {static final long serialVersionUID;private static final java.io.ObjectStreamField[] serialPersistentFields;!static !transient <fields>;private void writeObject(java.io.ObjectOutputStream);private void readObject(java.io.ObjectInputStream);java.lang.Object writeReplace();java.lang.Object readResolve(); } # 對R文件下的所有類及其方法,都不能被混淆-keepclassmembers class **.R$* {*;}#對于帶有回調(diào)函數(shù)onXXEvent的,不能混淆-keepclassmembers class * {void *(**On*Event);}#對實體類不進行混淆 -keep class com.clxchina.chelixiang.Model.** {public void set*(***);public *** get*();public *** is*(); }#對內(nèi)嵌類不進行混淆 -keep class com.clxchina.chelixiang.Adapter.*$* {*; }-keep class com.clxchina.chelixiang.lecheng.**{*; }#對WebView不混淆 -keepclassmembers class * extends android.webkit.WebViewClient {public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);public boolean *(android.webkit.WebView, java.lang.String); } -keepclassmembers class * extends android.webkit.WebViewClient {public void *(android.webkit.WebView, java.lang.String); } #對JavaScript不進行混淆 -keepclassmembers class com.clxchina.chelixiang.jzh.JZHSignCard$InJavaScriptLocalObj {<methods>; } -keepclassmembers class com.clxchina.chelixiang.jzh.WebViewActivity$InJavaScriptLocalObj {<methods>; }-dontwarn####針對應(yīng)用混淆 完成####

#對第三方j(luò)ar包不進行混淆
拿到第三方的jar包,有兩種情況,一種是已經(jīng)混淆過了,一種是開源的項目,所以基本上都是不需要混淆的,基本的思路就是找到j(luò)ar包的包名,然后-keep+dontwarn就行,常用的jar包不混淆的代碼如下供參考:

####混淆引用的第三方庫和SDK#####不對阿里云SDK進行混淆 -keep class com.alivc.player.**{*;} -keep class com.aliyun.vodplayer.**{*;} -keep class com.aliyun.vodplayerview.**{*;}#不對ShareSDK進行混淆 -keep class cn.sharesdk.**{*;} -keep class com.sina.**{*;} -keep class **.R$* {*;} -keep class **.R{*;} -keep class com.mob.**{*;}#不對OcrSDK進行混淆 -keep class com.baidu.ocr.sdk.**{*;} -keep class com.baidu.idl.**{*;} -dontwarn com.baidu.ocr.** -dontwarn com.baidu.idl.**#不對banner進行混淆 -keep public class * implements com.bumptech.glide.module.GlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {**[] $VALUES;public *; } # banner 的混淆代碼 -keep class com.youth.banner.** {*; } # fastjson 的混淆代碼 -keepattributes Signature -dontwarn com.alibaba.fastjson.** -keep class com.alibaba.fastjson.*{*; } -keep class com.***.utils.*{*; } -keep class com.***.Utils.*{*; }# Gson specific classes -keep class sun.misc.Unsafe { *; } #-keep class com.google.gson.stream.** { *; }# Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.examples.android.model.** { *; }#okhttputils 的混淆代碼 -dontwarn com.zhy.http.** -keep class com.zhy.http.**{*;} #okhttp 的混淆代碼 -dontwarn okhttp3.** -keep class okhttp3.**{*;} #okio 的混淆代碼 -dontwarn okio.** -keep class okio.**{*;} #facebook 的混淆代碼 -dontwarn com.facebook.** -keep class com.facebook.**{*;}-keepclassmembers class com.lechange.common.play.PlayListenerAdapter {void onPlayerResult(String , type);void onResolutionChanged(int , height);}-dontwarn com.jaeger.** -keep class com.jaeger.**{*;}-dontwarn com.kyleduo.** -keep class com.kyleduo.**{*;}-dontwarn info.hoang8f.** -keep class info.hoang8f.**{*;} -dontwarn uk.co.senab..** -keep class uk.co.senab..**{*;}-dontwarn org.apache.commons.** -keep class org.apache.commons.**{*;}-dontwarn com.google.zxing.** -keep class com.google.zxing.**{*;}-dontwarn com.uuch.adlibrary.** -keep class com.uuch.adlibrary.**{*;}-dontwarn com.allenliu.** -keep class com.allenliu.**{*;}-dontwarn android.support.multidex.** -keep class android.support.multidex.**{*;}-dontwarn cn.jiguan.** -keep class cn.jiguan.**{*;} -dontwarn com.lechange.** -keep class com.lechange.**{*;}####混淆引用的第三方庫和SDK 完成####

至此基本的混淆就完了,下一篇文章討論下混淆后出現(xiàn)的問題和如何進行debug.
點這里看混淆出現(xiàn)的問題和如何debug

總結(jié)

以上是生活随笔為你收集整理的Proguard 混淆之乱谈 3 混淆模板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。