Android ProGuard 常用設定 與 Library 衝突解決

Android ProGuard 常用設定 與 Library 衝突解決 (Gson, ActionbarSherlock)

Android Apps 主要由 Java 編寫,編譯 (Compile) 時先由 Java Code Compile 成 Java Bytecode,然後再變成 Dalvik Bytecode。
由於 Bytecode 對比 Machine Code 較易被反編譯 (Decompile),
反編譯後甚至連 Variable 及 Class 的名稱都不變,造成 Apps 較易被破解及盜用。

因此 Java 程式發佈通常使用 Obfuscator 把 Bytecode 的 Variable, Class 名稱及邏輯變得難以理解。
Obfuscator 有很多種,但 Android 的世界主要使用 Proguard (其實它還具有Optimizer等功能),
而且它已經被整合進 Android build system,所以只要簡單設定就可以使用(但不代表成功使用…)。

啟用 ProGuard

在 project.properties 加入 proguard.config 的設定,例如:

會先指定 SDK 目錄中的 proguard-project.txt,再用本地的 Override 之。
之後使用 Eclipse 的 Android > Export 或使用 ANT 等 Build 即會使用 ProGuard (Eclipse 直接 Run 不會)

啟用 ProGuard Optimization

Android SDK 的 default preset 沒有啟用 Optimization,如果需要啟用則再次修改 proguard.config 如下:

移除 Log.* Debug Message

只移除 Log.d 及 Log.v

移除全部 Log.*

解決 Gson 被 Obfuscated 後會出現 ClassCastException

因為 Gson 類似 gson.fromJson(json, SomeResponse.class) 會用 static reference 到某些 Class,
而那些 Class 的 Signature 被刪掉,Class Name都改掉了。

解決方法是在 proguard-project.txt 加入以下設定,叫 ProGuard 不要搞亂 Gson 的東西:

(需要 fromJson 的 Class 都放了在 com.tigerworkshop.responses 下)

參考:http://code.google.com/p/google-gson/source/browse/trunk/examples/android-proguard-example/proguard.cfg

解決 ActionbarSherlock 被 Obfuscated 後會出現 NoSuchMethodException

解決方法是在 proguard-project.txt 加入以下設定

參考: http://actionbarsherlock.com/faq.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值