星期五, 9月 02, 2011

該死的ProGuard

好久沒使用Java了,想不到Java上的反組譯程式這麼強,強到source code除了註解一字不漏地呈現在眼前,這叫我怎麼受得了,尤其是在我已經花了幾天的時間把程式的一部份完成後才發現,更是讓人難以接受,正想著可能以後要除了UI以外的東西都用JNI來寫的時候,發現有ProGuard這個工具,功用是打亂你的程式碼,讓反組譯出來的程式"比較"難以看懂,而且新版的Android SDK裡面已經內建了這個功能,只要修改一些東西就能用,哇,真是好消息,趕快來用一下,想不到就此陷入惡夢。

首先在Windows上的eclipse裡面用的時候老是出現 "conversion to dalvik format failed with error 1" ,這啥鬼,上網查了一下,有很多種情形,像是少了引用的套件資料什麼有的沒的問題,問題來了,我根本就沒有用到這些怪東西,程式都自己寫的,用的也是標準SDK裡面的東西,怎麼還會出現這種問題呢,在查看文章解答後試用不果的我,想到了山不轉路轉這個道理,我想到了凡是跟跨平台有關的任何鬼東西,在Linux上出問題的機率通常比Windows上少很多,抱著反正以後弄decoder的部分也許一樣要到Linux底下弄,不如先轉過去看看Linux行不行,咦?果然在Linux上一次就過了,這是怎麼回事? 難道要我以後都在Linux上開發嗎? 我是沒差,問題是我Coding的時候一定要聽音樂,音樂機又被該死的無鉛製程害死了,只能在主機上聽,用虛擬機器效能不好又問題多多,該如何是好呢?

不死心的我,又開始在網路上搜尋解答,直到找到這篇,才知道,原來我是在錯誤的時間點進入Android的世界,最新版的Android SDK for window有問題,只要把最新版的ProGuard抓下來覆蓋Android SDK裡面的proguard就可以用了,試過一次之後發現果然就一路順暢,真是可喜可賀.......

結論 : 切入的時間點很重要,當百思不得其解的時候,山不轉路轉,路不轉我轉,先把事情搞定再來找解答,還有,再次驗證了,只要是跨平台的東西,用Linux通常都會比較簡單,不是說Windows + Cygwin不好,而是麻煩,如果不熟的時候還是先用簡單的解法會比較好。