安裝包立減1M--微信Android資源混淆打包工具
http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=208135658&idx=1&sn=ac9bd6b4927e9e82f9fa14e396183a8f#rd
AndResGuard
https://github.com/shwenzhang/AndResGuard/blob/master/README.zh-cn.md
美團Android資源混淆保護實踐
http://tech.meituan.com/mt-android-resource-obfuscation.html
AndResGuard資源混淆用法
http://www.qingpingshan.com/rjbc/az/171398.html
關於AndResGuard
AndResGuard是一個幫助你縮小APK大小的工具,他的原理類似Java Proguard,但是只針對資源。他會將原本冗長的資源路徑變短,例如將res/drawable/wechat變為r/d/a。
AndResGuard不涉及編譯過程,只需輸入一個apk(無論簽名與否,debug版,release版均可,在處理過程中會直接將原簽名刪除),可得到一個實現資源混淆后的apk(若在配置文件中輸入簽名信息,可自動重簽名並對齊,得到可直接發布的apk)以及對應資源ID的mapping文件。
項目地址: https://github.com/shwenzhang/AndResGuard
Gradle集成
- Project/build.gradle
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.2' classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.1.14' } }
- 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.1.14' //path = "/usr/local/bin/7za" --- Linux //path = "D:\7za\7za.exe" --- Windows } }
如何使用
用法1:
用法2:
在Android Gradle Terminal中
- Windows
gradlew.bat resguardRelsese
- OS X or Linux
./gradlew reguardRelease
注意問題
- mappingFile用於增量更新,保持本次混淆與上次混淆結果一致;
- uss7zip為true時,useSign必須為true;
- useSign為true時,需要配置signConfig;
- whiteList添加在代碼內部需要動態獲取的資源id;
- sevenzip可使用artifacr或path,path指本地安裝的7za(7zip命令行工具)。
Android studio 混淆打包時如何忽略依賴庫中的第三方.so文件
http://blog.csdn.net/u011907407/article/details/55510379
在app項目中直接忽略library中的.so文件
在app的proguard-rules.pro忽略依賴庫中的文件寫法如下:
-libraryjars ../XXX(此處為library名稱)/src/main/jniLibs/armeabi/xxxxx.so
-libraryjars ../XXX(此處為library名稱)/src/main/jniLibs/armeabi-v7a/xxxxx.so
-libraryjars ../XXX(此處為library名稱)/src/main/jniLibs/x86/xxxxx.so
同理依賴庫中jar包在app 中忽略混淆的寫法
-libraryjars ../XXX(此處為library名稱)/libs/xxx.jar
-libraryjars ../XXX(此處為library名稱)/libs/xxx.jar
最后溫馨提醒:
shrinkResources true
(該屬性為打包時是否自動刪除無用的資源與代碼,慎用!!據說有人因為這個屬性導致app崩潰..此處不詳細討論..)