資源混淆配合7zip壓縮,減小apk大小,增加破解難度。
通過resource.arsc文件格式,混淆步驟為:
- 解析arsc文件,主要為全局與資源名字符串池
- 修改字符串池中的字符串,以無意義的a/b替換
- 修改apk中的res目錄資源文件名
- 打包(7zip)、對齊、簽名
微信資源混淆打包工具AndResGuard或者美團資源混淆打包工具。
7zip壓縮參考:
http://blog.rcant.com/2017/03/19/others/android-andresguard/
AndResGuard使用
1.項目根目錄下build.gradle中,添加插件的依賴
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.15'
2.在app目錄下,創(chuàng)建and_res_guard.gradle文件(也可以直接將內(nèi)容寫入build.gradle文件)
apply plugin: 'AndResGuard'
andResGuard {
// mappingFile = file("./resource_mapping.txt")
mappingFile = null
use7zip = true
useSign = true
// 打開這個開關(guān),會keep住所有資源的原始路徑,只混淆資源的名字
keepRoot = false
whiteList = [
// for your icon
"R.drawable.icon",
// for fabric
"R.string.com.crashlytics.*",
// for google-services
"R.string.google_app_id",
"R.string.gcm_defaultSenderId",
"R.string.default_web_client_id",
"R.string.ga_trackingId",
"R.string.firebase_database_url",
"R.string.google_api_key",
"R.string.google_crash_reporting_api_key",
// 我在實際項目中遇到第三方使用getIdentifier訪問的資源的問題,將指定的資源放入白名單后,雖然不閃退了,但還是會出現(xiàn)無法理解的錯誤。所以只好全部id都放入白名單
"R.id.*"
]
compressFilePattern = [
"*.png",
"*.jpg",
"*.jpeg",
"*.gif",
]
sevenzip {
artifact = 'com.tencent.mm:SevenZip:1.2.15'
//path = "/usr/local/bin/7za"
}
/**
* 可選: 如果不設(shè)置則會默認(rèn)覆蓋assemble輸出的apk
**/
// finalApkBackupPath = "${project.rootDir}/final.apk"
/**
* 可選: 指定v1簽名時生成jar文件的摘要算法
* 默認(rèn)值為“SHA-1”
**/
// digestalg = "SHA-256"
}
3.在build.gradle文件中引用
apply from: 'and_res_guard.gradle'
集成完AndResGuard后,在app的gradle的tasks中,多了一個叫做andresguard的task
打debug包: 執(zhí)行resguardDebug指令;
打preview包: 執(zhí)行resguardPreview指令;
打release包 : 執(zhí)行resguardRelease指令。
雙擊執(zhí)行resguardRelease指令,執(zhí)行完畢后,可以在app目錄下的/build/output/apk/release/AndResGuard_{apk_name}/ 文件夾中找到混淆后的Apk即可。
APK優(yōu)化(一)之SVG--------------解決大量的套圖問題
APK優(yōu)化(二)之Tint著色器-------------減少apk體積
APK優(yōu)化(三)之資源打包配置----resources.arsc
APK優(yōu)化(四)之.so動態(tài)庫打包配置
APK優(yōu)化(五)之移除無用資源,物理刪除
APK優(yōu)化(六)之代碼混淆
APK優(yōu)化(七)之啟用shrinkResources資源縮減 ,不需要物理上的刪除
APK優(yōu)化(八)之啟用webp轉(zhuǎn)換插件-----圖片變小
APK優(yōu)化(九)之資源res文件混淆和7ZIP壓縮