October 26, 2010

ProGuard on android LVL

今天一整天被android的混淆搞的烏煙瘴氣,害我又浪費掉一整天的時間。

最近先前的案子要發佈到android market上,臨時說禮拜五前要上,於是昨天花了一天弄那包LVL,下半前終於搞定。本以為今天只要再做個混淆就可以release了,沒想到ProGuard又耗了我一天。

終究原因如下。在google所release的market licensing的那包library裡面有用到enum這個東西。由於先前聽說在android上使用enum會有某些奇怪的問題,所以我們自己寫的code一律都是使用static final int來做。

沒想到的是,就在這包android的ref design裡面竟然有用到enum。混淆之後enum的value/valueof被混淆過,於是就不能用了。

在ProGuard官方網站裡面有提到這點,詳細請參考這邊

具體的作法就是把-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
這段加到ant build的xml中ProGuard那段裡面即可。

0 Comments: