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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

在Android Studio中进行代码混淆

發(fā)布時(shí)間:2025/7/25 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Android Studio中进行代码混淆 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

此文章來(lái)源于http://blog.csdn.net/wenwen091100304/article/details/52802247點(diǎn)擊打開(kāi)鏈接

在Android?APP開(kāi)發(fā)完成后,為了防止APP被盜版、以及其他安全因素,大多數(shù)APP都會(huì)被要求做混淆編譯,因此作為一項(xiàng)必要技能,就必須得掌握了,下面簡(jiǎn)單記錄一下真?zhèn)€實(shí)踐過(guò)程。?
  

  • 編輯混淆規(guī)則文件?
    ?
    如圖所示,可以從Android Studio的工程目錄上看出對(duì)應(yīng)每個(gè)模塊的混淆規(guī)則文件,每個(gè)模塊使用不同的混淆規(guī)則,根據(jù)實(shí)際情況,進(jìn)行相關(guān)的編輯。?
    這里舉個(gè)Volley的混淆規(guī)則文件看看:
-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -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 -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 *; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 混淆規(guī)則文件規(guī)則說(shuō)明?
     (1)基本命令
# 代碼混淆壓縮比,在0~7之間,默認(rèn)為5,一般不下需要修改 -optimizationpasses 5# 混淆時(shí)不使用大小寫(xiě)混合,混淆后的類(lèi)名為小寫(xiě) # windows下的同學(xué)還是加入這個(gè)選項(xiàng)吧(windows大小寫(xiě)不敏感) -dontusemixedcaseclassnames# 指定不去忽略非公共的庫(kù)的類(lèi) # 默認(rèn)跳過(guò),有些情況下編寫(xiě)的代碼與類(lèi)庫(kù)中的類(lèi)在同一個(gè)包下,并且持有包中內(nèi)容的引用,此時(shí)就需要加入此條聲明 -dontskipnonpubliclibraryclasses# 指定不去忽略非公共的庫(kù)的類(lèi)的成員 -dontskipnonpubliclibraryclassmembers# 不做預(yù)檢驗(yàn),preverify是proguard的四個(gè)步驟之一 # Android不需要preverify,去掉這一步可以加快混淆速度 -dontpreverify# 有了verbose這句話(huà),混淆后就會(huì)生成映射文件 # 包含有類(lèi)名->混淆后類(lèi)名的映射關(guān)系 # 然后使用printmapping指定映射文件的名稱(chēng) -verbose -printmapping priguardMapping.txt# 指定混淆時(shí)采用的算法,后面的參數(shù)是一個(gè)過(guò)濾器 # 這個(gè)過(guò)濾器是谷歌推薦的算法,一般不改變 -optimizations !code/simplification/artithmetic,!field/*,!class/merging/*# 保護(hù)代碼中的Annotation不被混淆 # 這在JSON實(shí)體映射時(shí)非常重要,比如fastJson -keepattributes *Annotation*# 避免混淆泛型 # 這在JSON實(shí)體映射時(shí)非常重要,比如fastJson -keepattributes Signature# 拋出異常時(shí)保留代碼行號(hào) -keepattributes SourceFile,LineNumberTab
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

(2)混淆代碼中要保留的的部分

# 保留所有的本地native方法不被混淆 -keepclasseswithmembernames class * {native <methods>; }# 保留了繼承自Activity、Application這些類(lèi)的子類(lèi) # 因?yàn)檫@些子類(lèi)有可能被外部調(diào)用 # 比如第一行就保證了所有Activity的子類(lèi)不要被混淆 -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 public class com.null.test.ui.fragment.** {*;}# 保留Activity中的方法參數(shù)是view的方法, # 從而我們?cè)趌ayout里面編寫(xiě)onClick就不會(huì)影響 -keepclassmembers class * extends android.app.Activity {public void * (android.view.View); }# 枚舉類(lèi)不能被混淆 -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序列化的類(lèi)不能被混淆 -keep class * implements android.os.Parcelable{public static final android.os.Parcelable$Creator *; }# 保留Serializable 序列化的類(lèi)不被混淆 -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(); }# 對(duì)R文件下的所有類(lèi)及其方法,都不能被混淆 -keepclassmembers class **.R$* {*; }# 對(duì)于帶有回調(diào)函數(shù)onXXEvent的,不能混淆 -keepclassmembers class * {void *(**On*Event); }#保持實(shí)體類(lèi)所在的包 -keep class com.wasu.wasulkl.data.**{*;}#如果項(xiàng)目中用到了WebView的復(fù)雜操作,請(qǐng)加入以下代碼: -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.null.test.MainActivity$JSInterfacel {<methods>; } #其他第三方的jar包的解決方案 #這個(gè)要取決第三方j(luò)ar包的混淆策略了。一般在其官方文檔上面都有混淆說(shuō)明。比如支付寶相應(yīng)的混淆規(guī)則就是 -libraryjars ./libs/alipaysdk.jar -dontwarn com.alipay.android.app.** -keep public class com.alipay.** {*;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 打開(kāi)混淆編譯開(kāi)關(guān)?
      接下來(lái)要做的就是打開(kāi)混淆開(kāi)關(guān),這個(gè)很簡(jiǎn)單,在build.gradle文件中,代碼如下,:?
      
buildTypes {release {minifyEnabled true //混淆開(kāi)關(guān),true是打開(kāi),false是關(guān)閉proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}

總結(jié)

以上是生活随笔為你收集整理的在Android Studio中进行代码混淆的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: a资源在线 | 国产精品久久久久久久久久小说 | 另类性姿势bbwbbw | 欧美激情一区 | 精品国产黄色片 | 超碰在线91 | 国产视频一区二区三区四区 | 欧美久久久久久又粗又大 | 免费看又黄又无码的网站 | 国产精品视频一二区 | 狠狠干2018| 岛国午夜视频 | 亚洲欧美在线视频观看 | 成人免费做受小说 | 91九色网| 在线尤物 | 69av视频在线观看 | 激情五月综合色婷婷一区二区 | 自拍偷拍精品 | 精品欧美一区二区在线观看 | 欧美性受xxxx黑人猛交88 | 色婷婷激情 | 又黄又色的网站 | melody在线高清免费观看 | 久久爱伊人 | 国产精品久久久久久亚洲av | 久久久18禁一区二区三区精品 | 亚洲乱码日产精品bd在线观看 | 成人在线免费网址 | 久久国产精品久久精品国产 | 日本高清视频在线 | 日韩欧美视频在线播放 | 亚洲欧美日本在线观看 | 超碰天堂| 欧美另类z0zx974 | 久久久精彩视频 | 91丝袜一区二区三区 | 超碰pron | 男男啪啪网站 | 色婷五月 | 久久精品人人 | 国产精品高潮呻吟久久av黑人 | 91久久爽久久爽爽久久片 | 久久久久久无码午夜精品直播 | 免费播放av | 日韩视频中文字幕在线观看 | 911美女片黄在线观看游戏 | 女人被灌满精子 | 国产精品第一区 | 国产精品91久久 | 97偷拍视频| 天天爽夜夜爽夜夜爽 | 性激情视频 | 欧美浮力影院 | 欧美 日韩 国产 在线观看 | 一本色道无码道dvd在线观看 | 激情欧美一区二区三区 | 欧美视频一区二区在线 | 久久福利一区 | 亚洲成人动漫在线观看 | 国产女主播在线观看 | 毛片aaaa| 韩国19主播内部福利vip | 男人女人拔萝卜视频 | 在线观看国产精品视频 | 人人免费操| 激情高潮呻吟抽搐喷水 | 国产理论片 | 日本猛少妇色xxxxx | 久久久久久久久久久久久久国产 | 亚洲麻豆一区二区三区 | 日韩一区二区欧美 | a级黄色网| 亚洲图片综合网 | bl动漫在线观看 | 五月av| 日韩精品久久久久久免费 | 无遮挡av| 香蕉色网 | 亚洲欧美一区二区精品久久久 | 国产精品久久久免费视频 | 制服丝袜快播 | 91社区视频 | 中文字幕在线观看视频www | 亚洲精品9999 | 免费观看视频在线观看 | 人乳videos巨大吃奶 | 精品人伦一区二区三区蜜桃免费 | 超碰加勒比 | 天天看片天天爽 | 亚洲男人影院 | 欧美成人免费观看 | 激情另类小说 | 丁香花电影免费播放电影 | 99久久国产综合 | 一区二区三区四区日韩 | 欧美壮男野外gaytube | 亚洲中文字幕无码专区 | 疯狂撞击丝袜人妻 |