Android專案整合AndResGuard資源混淆兩種方式
Android 專案開發完成後我們為了防止別人反編譯我們的apk安裝包,我們需要對我們開發完的安裝包做一些處理,比如程式碼混淆、加殼、資源混淆、資源加密等,本文要介紹的是微信官方推薦的AndResGuard資源混淆方法。
1、AndResGuard官方介紹
AndResGuard
是一個幫助你縮小APK大小的工具,他的原理類似Java Proguard,但是隻針對資源。他會將原本冗長的資源路徑變短,例如將res/drawable/wechat
變為r/d/a
。AndResGuard
不涉及編譯過程,只需輸入一個apk(無論簽名與否,debug版,release版均可,在處理過程中會直接將原簽名刪除),可得到一個實現資源混淆後的apk(若在配置檔案中輸入簽名信息,可自動重簽名並對齊,得到可直接釋出的apk)以及對應資源ID的mapping檔案。
2、AndResGuard整合方式
第一種 Gradle整合
①、專案Project/build.gradle檔案中增加以下內容
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.3' } }
②、Module/build.gradle檔案中增加以下內容
參照官方文件有幾個問題說明下apply plugin: 'com.android.application' apply plugin: 'AndResGuard' android { ... } dependencies { ... } andResGuard { // mappingFile = file("./resource_mapping.txt") mappingFile = null use7zip = true useSign = true // 開啟這個開關,會keep住所有資源的原始路徑,只混淆資源的名字 keepRoot = false whiteList = [ // for your icon "R.drawable.icon" ] compressFilePattern = [ "*.png", "*.jpg", "*.jpeg", "resources.arsc" ] sevenzip { artifact = 'com.tencent.mm:SevenZip:1.2.3' //path = "/usr/local/bin/7za" --- Linux //path = "D:\7za\7za.exe" --- Windows } }
mappingFile用於增量更新,保持本次混淆與上次混淆結果一致;
uss7zip為true時,useSign必須為true;
useSign為true時,需要配置signConfig;
whiteList新增在程式碼內部需要動態獲取的資源id;
sevenzip可使用artifacr或path,如果兩種都設定以path路徑為準,path指本地安裝的7za(7zip命令列工具)下載路徑。
建議下載圖中紅色框中的即可,當然你也可以下載其他版本,注意的是在win下7Z的安裝後如果沒有7za.exe的話,可以把7z.exe複製一份改成7za.exe,並配置環境變數
同步後,我們gradle的task任務列表裡就會出現混淆任務
雙擊上圖中的選中任務,混淆就會開始,和普通的buidApk任務一樣,完成後會彈個框作為提示。混淆後的apk生成在build/output/apk/AndResGuard_*
目錄中,官方說法預設會生成4種apk,我們選擇簽名、壓縮、對齊後的apk即可,字尾名是*_signed_7zip_aligned.apk,但我用
該方式並未出現4種apk,只出現3種,沒有7zip的包。
①、下載AndResGuard,下載地址 ②、下載完成後,專案結果如下 開啟tool_output資料夾內容 修改配置檔案,此處因為我們是用的windows系統開發的,故選擇bat檔案 此處我們首選要修改jdk的目錄,其次修改sdk目錄,我們看到下面有一個input.apk引數,這個就是需要混淆的apk原檔案,outapk為輸出檔案目錄
增加set sevenzippath=C:\Program Files\7z1700-extra\7za.exe
執行指令為 "%jdkpath%" -jar AndResGuard-cli-1.2.3.jar input.apk -config config.xml -out outapk -signature "%storepath%" "%storepass%" "%keypass%" "%alias%" -7zip "%sevenzippath%" -zipalign "%zipalign%"
修改完成之後我們雙擊build_apk.bat批處理檔案執行
我們將apk檔案字尾名改為zip開啟
可以看到r資料夾中的內容都混淆了,這種方式實現了7zip壓縮,apk安裝包進一步減少!