代碼混淆應該很多人聽過 但是很少使用 因爲他會修改編譯後的最終代碼 可能會導致軟件閃退啊 什麼亂七八糟的 對此敬而遠之 不想去碰他
下面來簡單說下我的使用經驗
混淆 不能混淆四大組件名字和路徑、自定義view的名字和部分方法名字(什麼動畫要用到)、ndk的類 不能混淆名字 方法名字、以及之前說過的ndk調java的 那個java方法名字、還有webview的一些東西也和被反射的類不能混淆
以上的網上都有說明和每個混淆參數的簡潔 我這裏就不多講了 自己先把基礎瞭解下
例如這個博客的文章或者其他的文章 去了解下各個指令的用途
其他的就無所謂了
一般的配置按照你學習的辦法搞就行了 然後我這裏只重點說明一下
- 不要使用網上的那些什麼狗勞子 第三方庫通用混淆配置大全 沒籃子用ojbk
- 使用的開源庫 如果沒有說明混淆要配置什麼 就不要去配置他的排除
- 如果因爲第二條出現運行時錯誤 先去仔細找一下官方有沒有混淆說明 是不是之前沒注意到 然後再通過-keep等相關的之類去排除 寫代碼這些都行怎麼搞都懂 這裏懶得講
- 一定要了解項目 和自己使用的第三方庫(低優先級) 其中代碼可能用到反射等操作 這時候一定要排除被反射的類名 和方法 也儘量避免使用反射 第三方庫用到反射一般會說明混淆排除的 除非那個開源十分不負責任
- 項目使用了webview的要注意混淆配置 以及使用了h5 js交互的 要排除
Json實體類混淆參照我之前的文章Json混淆辦法
記得我說的重點 然後開始你的混淆配置 編譯混淆包後 測試一遍檢查是否存在問題 沒有其他問題就可以開始瞭解一下下面幾個指令
#混淆時重打包 把你包名裏面的代碼抽取到你指定的包名底下 沒有會創建
#比如我這裏就比較皮了 僞裝到v4包裏面 玩幾秒鐘的捉迷藏
-repackageclasses 'android.support.v4'
#自定義混淆字典 配和名字一樣 成員的名字 類名 包名 各種都可以設置字典
-obfuscationdictionary dict.txt
-classobfuscationdictionary dict.txt
-packageobfuscationdictionary dict.txt
這個字典比較重要了 我們默認的規則就是一些字母 混淆後也不算很難閱讀
但是這個字典就比較騷了 空白字符+特殊字符 看起來完全分不清啥是啥看下圖 手段極其殘忍
這裏是字典下載地址 我找了很久才找到這個開源的字典生 我copy了一份點我爲飛機直達
簡單混淆就到這裏了
下面再補充一發 字符串混淆 防止別人通過文本搜索定位到某個功能代碼段
下面是混淆後的字符串(來呀 你搜啊 哇咔咔
字符串全部變成byte了 完全卡不出是個啥
混淆工具github地址 這個也不是我的 我只是copy了一份點我飛機直達
按照github上面的說明使用就行 這裏不說了