2012/04/12

一路看到底之apk反組譯

這篇要講的,其實也不是真的都看光光,在有名的拍照分享應用程式裡的濾鏡效果,就是用了比較隱晦的方式在作濾鏡。

觀看.jar檔的GUI工具,也另外提供eclipse plugin(個人偏好在獨立的GUI裡看):
http://java.decompiler.free.fr/?q=jdgui

dex2jar 可直接到手的apk檔 轉譯成 jar檔:
http://code.google.com/p/dex2jar/

常見FAQ:http://code.google.com/p/dex2jar/wiki/Faq
實際的操作方式請參考:http://code.google.com/p/dex2jar/wiki/UserGuide

除了用dex2jar可以把應用程式內的整個package結構完整呈現外(目前覺得這樣的用途比較大),另外如果要看AndroidManifest.xml等其他相關layout及resource檔的話,這邊我是用apktool來處理。

apktool:http://code.google.com/p/android-apktool/
依照各個環境下載後解開至定位,需下載 apktool-install-[OS]-* file及 apktool-* file(要不要加到path隨個人喜好)


環境:
Ubuntu 12.04
SUN Java 1.6.0_31

心得:

既然apk都能被看光光,那一般的熱門應用程式他們有用ProGuard之類的混淆器來處理apk,掩蓋他們的程式碼嗎?

Instagram沒有,Path也沒有。

我猜,他們的思維已經把應用程式視為「載具」,iOS應用程式是載具,android應用程式當然也是如此,跨平台當然可以幫助增加使用者量,但重要的還是如何讓使用者喜歡!(Instagram Android 版載入圖片速度超慢阿...但我還是會用耶!真神奇!)

也許我們還小鼻子小眼睛,總是寫了一些東西就怕被抄,想趕快保護起來吧!算算歐美也被我們抄了幾十年了,為何我們產業還是只能跟隨在後面?心態思維上的差異,讓我不僅汗顏...

真正有價值的是能創造出整個服務跟體驗的團隊人員,寫出來的程式只是結果,就像你看NBA球員滿場飛奔猛灌很爽,也來學個他們的動作,比一比當然是自娛娛人,但為何他們除了可以做出誇張的動作,生涯又可長可久,還能做出經濟效益?因為他們除了天份,基本功底子深厚,投入自主練習時間超長(長不是代表我們這種長工時...),自然能各自發展出各種類型的球員,既互補、又競爭。

比賽只是展現結果,
程式碼也是如此!


2012/04/05

使用Fragment寫的第一個案例

follow http://www.vogella.de/articles/Android/article.html#fragments 這個教學自製了一個簡單的project: android.fragments

一路卡關...

先是...

FragmentActivity causing ClassNotFoundException

(若使用一般方法將support library匯入便會出現以上錯誤...)

不知道在我的v 2.3.7上deploy要先把神奇的android.support.v4加到prj中,而且還不能用一般方法從property>java build path去加,得用官方的android tools>add support library... 的動作才能正確加入能完整支援fragment的library,讓低於android v3.0的機器也能正確顯示。

加入後
把所有原本 "extends Activity" 的 activity都改成 "extends FragmentActivity"

把所有原本 "extends Fragment" 的 activity都改成 "extends android.support.v4.app.Fragment"

第二關..目前還無解...
04-05 18:02:57.748: E/AndroidRuntime(26450): Caused by: java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x2

只好先run在v 4.0模擬器上


環境:
UBUNTU 12.04
JAVA 1.6.0_31
Android phone @ v2.3.7 with 小米ROM
eclipse 3.7
ADT-17

後記:

UBUNTU環境真的是得很克難的一直調整到符合自己使用的狀態阿...
是不是乾脆把手機升到miui 4.0呢?哎唷!

更新:

關於java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x2的問題,看來是因為在main.xml裡面有幾個設定找不到這個東西:
android:layout_marginTop="?android:attr/actionBarSize",看來在4.0的SDK裡找的到這個定義,但跑在pre 4.0的版本上,直接把layout_marginTop寫成個固定值即可!CASE CLOSED!













2012/04/02

Android apk installation problem:INSTALL_PARSE_FAILED_NO_CERTIFICATES

在UBUNTU 12.04上,好不容易把預設的OpenJDK改掉,改成SUN-JAVA-7,接著又遇到打包signed apk後,安裝會出現INSTALL_PARSE_FAILED_NO_CERTIFICATES的問題...經過千山萬水,果然還是得用SUN-JAVA-6,才能正常打包!

安裝SUN-JAVA-6的方法請見UBUNTU官方說明
裡面wget的路徑都消失了,請自行到Oracle官網下載後再依照指示步驟完成檔案的搬移跟安裝:


官網上的這個指令可以省略,因為路徑已不存在:
 $ sudo update-alternatives --install "/usr/lib/mozilla/plugins/libjavaplugin.so" "mozilla-javaplugin.so" "/usr/lib/jvm/jre1.6.0_31/lib/i386/libnpjp2.so" 1



完成安裝之後,輸入下面的指令才能確認是不是有改到設定:



記得最後也看看java -version及javac -version顯示的版本是不是改成1.6。

若編譯還是有問題,可以在多個選擇中調整看看。

另外記得follow一下code.google.com上的issue,目前已經變成兩隻了...


解法不一,但最保險的方法還是...遠離JDK7,最新的不一定最好,畢竟google跟oracle關係不是很好,不相容的事情...呵呵...不意外嘛!