1. 程式人生 > >Android專案整合AndResGuard資源混淆兩種方式

Android專案整合AndResGuard資源混淆兩種方式

Android 專案開發完成後我們為了防止別人反編譯我們的apk安裝包,我們需要對我們開發完的安裝包做一些處理,比如程式碼混淆、加殼、資源混淆、資源加密等,本文要介紹的是微信官方推薦的AndResGuard資源混淆方法。

1、AndResGuard官方介紹

AndResGuard是一個幫助你縮小APK大小的工具,他的原理類似Java Proguard,但是隻針對資源。他會將原本冗長的資源路徑變短,例如將res/drawable/wechat變為r/d/aAndResGuard不涉及編譯過程,只需輸入一個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的包

第二種下載jar包 指令整合
①、下載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批處理檔案執行


開啟生成outapk資料夾,我們看到5種模式的apk安裝檔案,input_signed_7zip_aligned.apk就是我們最後需要apk檔案
我們將apk檔案字尾名改為zip開啟
可以看到r資料夾中的內容都混淆了,這種方式實現了7zip壓縮,apk安裝包進一步減少!