修改既有 APK 的流程

如果從網路上抓到一個 APK, 又想要對它修改的話, 大約需要幾個步驟.

第一步是抓 APK TOOL 或是 APK Manger 回來. 雖然他們都有 Windows 版本, 但是用起來和 MS-DOS 差不多, 並沒有方便的視窗可以操作. 原本聽說 APK Manager 很厲害, 但是選單也相對較複雜, 就沒有再研究了.

APK Tool 這一系列需要抓  apktool-1.0.0.tar.bz2 和 apktool-install-windows-2.1_r01-1.zip. 解開後得到一個apktool.jar 和 apktool. 雖然網路上說 apktool.jar 要 copy 到 c:windows, 但是實際上發現它只有放在 apktool 同一個目錄才找得到 (除非那個目錄就是 c:windows).

接著使用 apktool d ThisIsYourAPK.apk ThisIsYourDirectory

就可以把 APK 的內容解到 ThisIsYourDirectory. 下面可以看到 lib, res, smali 三個基本的目錄, 以及 AndroidManifest.xml.

若是直接把 .apk 重新命名成 .zip 後解壓縮 (unzip) , 同樣也會看到 lib, res, 與 AndroidManifest.xml. 但可能會多出 METAINF  目錄, 與 resources.arsc, 與 classes.dex 兩個檔案. 其中 classes.dex 可以再依序反組譯為 class → jar → java.  對應到 apktool 生出的 smali.

上面兩種方式獲得的結果不同, 特別可以從 AndroidManifest.xml 看出來. 由於 APK 是給 DVM 看的格式, 所以這個檔案已經變得不可讀了. 當然, 它可以再用工具將它還原 Android: 反編譯 Android APK 文件. 一路用工具把 APK 裡面的各個 binary 還原回 source code 也是一個方法.

若是使用 apktool, 反組譯後得到的 source 都是可讀, 包括. 比方說想把免費軟體裡面的廣告拿掉, 畫面從直的改橫的, 可以直接到 res/layout/main.xml 裡面去撈相關的定義來修改 – 一個 APK 反編譯利器 Apktool.

此外, 若是以 apktool 反組譯, 修改完了之後, 還可以用 apktool b ThisIsAAPK.apk  打包回 APK. 最後再加個簽名, 就變成正式的 APK. 如果是用 unzip 提出來的修改的, 要再打包成 APK 似乎比較麻煩.

如果得到的是一個已經打包好的 APK, 那麼重編 Android 系統時可以將它放在 device 的某層目錄下一起編譯. 在這個 APK 同層的目錄裡, 寫一個 Android.mk – android 編譯系統 makefile (Android.mk) 寫法. 就可以把 APK 編進系統裡面了.

雖然上面的那個連結的內容很多, 但是 Adroid.mk 裡面只要有下面幾個基本要素就夠了. 制式定義好的部分根本不用動. 

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ThisIsYourAPK
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX :=$(COMMON_ANDROID_PACKAGE_SUFFIX
include $(BUILD_PREBUILT)

如果像這樣寫了很多 APK, 上層目錄再加一個 Android.mk,  寫上這兩行即可.

include $(CLEAR_VARS)
include $(call all-makefiles-under, $(LOCAL_PATH))

寫完本篇之後, 忽然找到兩個厲害的網站, 順便記在這裡.

[1] [android反编译小结]apktool/ AXMLPrinter2.jar/ dex2jar.bat/ jd-gui/ Jodeclipse/ JadClipse

[2] 把玩"魔術師" — 認識、把玩 APK 檔

雲端小整理

雲端時代來到, 光碟片可以打包拿去小七換茶葉蛋了. 然而, 雲端包括哪些呢? 我稍微看了一下, 排除架站空間這種前一代的產品之外. 大概可以還分成 4 大類. 第一類就是免費 (免註冊) 空間, 第二類是網路硬碟, 第三類是企業私有雲, 第四類則是個人私有雲.

以前我們和客戶傳那些有 bug 的影片時, 為了避免把 ftp server 的帳號密碼弄得客戶在波蘭的客戶都知道, 乾脆就直接上傳到免費空間. 到時候只要給一個 link, 他們就可以自己去下載. 此類的雲端包括 FileSonic, FileDeck, uploadstation, megaupload, rapidshare…等等, 族繁不及備載.

花錢的人主要可以得到頻寬 – 高速下載, 沒花錢的人則需要等待好幾秒才能慢速下載 (時間 = 金錢). 網站的空間大小相對比較不重要, 因為既然不需要註冊, 也就不用分你的我的了. 也由於此類免費空間可以不需要註冊, 使它成為盜版軟體交流的天堂. 故前一兩年好幾個知名網站都被美國政府禁了.

第二類的雲端就是公有雲, 泛指資料儲存在別人家裡的軟體空間, 例如 dropbox, SkyDrive, Google 硬碟. 由於自己的資料等同被廠商綁架, 免費空間用完之後, 還得掏腰包去買更大的空間來維持使用習慣. 以一顆 2TB 硬碟有 3 年保固, 且售價 4199 NTD 來算的話, 每個月花 1.167 NTD 去租 20GB 基本上是划算的. 可惜實際上得花 300 NTD 才能搞定 [註1]. 花錢的人主要得到空間, 而不是保證頻寬.

第三類的雲端是企業私有雲. 原本我看到微軟也搞私有雲, 有心想要下載來試試看. 不料安裝了好久好久, 才想通我根本就不是他們的目標客戶. 這些大公司的主要客戶是大企業 [註 2] . 比方說: HP, IBM, Oracle, VMware-EMC-Cisco, 以及 Microsoft 都推出了企業私有雲的解決方案.  

第四類才是個人的 “私有雲". 假如不放心把資料放在別人那裡, 更不想花冤枉錢; 那麼使用者得自備 server, 頻寬, 下載並安裝軟體. Tonido, B driver 都是這類的雲端公司. 由於天下沒有白吃的午餐, 廠商的賺錢之道在於卡住某些功能, 或是販賣升級版.

Tonido 軟體包括 server 端以及 client 端. Server 端就是放檔案資料的地方, 支援 Windows, MacOS, 和 Linux 三大平台. 而 client 是透過網頁的方式連接 server, 包括下載或上傳檔案的 app. Tonido 最大的敗筆就是不能從 client 更新 server 的同名檔案  [註 3], 也許這是我的使用錯誤或是程式的限制. 不過, 只要在 Google 輸入 Tonido IO error 就可以看到和我同病相憐的人.

B Driver 基本上是變形的 Dropbox, 所以它沒有 server 的概念. 在 Windows, IOS, 和 Android 三個平台上都可以看到同一個帳號在不同主機下的硬碟 (的某個目錄). 不論從哪裡連進來, 都是一個 device. 而且點進去之後, 它還直接有一個 dropbox 的功能, 可以和 dropbox 互傳內容.

最後, 整理第二三四類雲端如下表, 第二類詳見 [註 1]. 第一類免費空間 (簡稱 “免空") 的相關訊息太多了, Google 就可以得到完美解答.

名稱 容量 儲存位置 Windows Mac Android IOS 註解
DropBox 2 GB 公有 V V V V 非常方便, 唯二的缺點就是空間太小和資料在別人手上.
Tonido 不限 私有 Server Server V V Server 還支援Linux. Client 還支援 WP7 和黑莓機.
B Driver 不限 私有 V X V V 少了 MacOS 對我就沒用了.
微軟 System Center 2012 不限 私有 V X X X 1. 安裝需要很久, 而且部適合個人用. [註 4]

[註 1] 八種「雲端檔案儲存服務」價格容量大車拼,看看誰比較便宜!(增加Hami個人雲) 

[註 2] 從虛擬化邁向企業私有雲

[註 3] http://www.tonido.com/forum/viewtopic.php?f=14&t=2580&start=10

[註 4] 下載 Microsoft 私用雲端評估軟體

QEX 小檔案

因為美國 QE3 (Quantitative Easing) 量化寬鬆政策來了, 所以我整理一下狀況, 心裡好有個底.

  時間 長度 總金額 (兆) 每月平均 (億) 投資標的
QE1 20089/1~2010/3 15 個月 1.7 1,100 1. 25萬億 – 抵押貸款支援證券
2. 3000億 – 美國國債
3. 1750億 – 公司債
QE2 2010/10~2011/6  約 7 個月 0.6 750, 一說 860 美國國債
QE3 2012/9~ 美國失業改善前  

400

450

不動產抵押債券

扭曲操作

 

人家說, QE1 效果不好, 所以才推 QE2; 同理, QE2 效果不好, 所以有 QE3. 而且它的規模愈來愈小, 效果可能一次比一次差, 像是吃特效藥, 打強心針一樣.

不過我整理完後, 想法和前面的印象完全不同.  QE1 的錢主要都在買 "(房屋) 抵押貸款支援證券" – (R)MBS – (Residential / Mortgage—backed Security). 由於這些貸款戶根本還不出房貸, 所以這筆呆帳等於由是美國政府吸收了. 剩下的錢, 才是和 QE2 一樣買債券.

在債券的部分, 美國政府實施扭曲操作 (Operation Twist) – 買進長債而賣出短債. 此舉並沒有真正的地把鈔票釋放到民間, 只不過是做了類似降低銀行存款準備率的事, 讓短期的資金較為活絡. 當然, 此舉對於經濟的刺激有限遠遠不比上 "爛攤子丟給下一代" 的 QE1 有效.

至於 QE3, 又回頭買 MBS 啦! 但這回並不是要買進呆帳, 看來是要力挺衍生性金融商品. 美國真是個自由的國家, MBS, CDO 這種害人的東西, 雖然可以刺激景氣, 但是卻帶來了 2008 年的金融風暴. 若是美國政府主動要買 MBS, 當然房地產公司都樂於把風險轉嫁給政府囉!

所以, 據我非常不專業的判斷, 美國希望能夠用 (虛假的) 榮景來刺激經濟. 房地產是經濟的火車頭, 若是大家再度勇於買房, 美國的失業率確實有可能會下降. 只不過套句俗話應該說是飲酖止渴.

對於美國房地產業來說, 這真是空前的好機會. 所以那些有房子沒賣或是前陣子買房子的美國朋友應該可以直接受惠. 接下來就是美國人有錢可以消費不動產以外的東西, 使得全球經濟好轉 (?) — 美國人威力這麼大, 主要是太愛花錢了吧!

為了抑制美國人長期投資的慾望, QE3 打算每個月比 MBS 多花 50 億去做扭曲操作 (OT). 所以就算是短期間景氣轉熱, 吹出景氣的泡沫, 通膨隱憂則是免不了了.

消失的 APK

Android 的 adb (Android Debug Bridge) 是個非常好用的工具, 基本上它代替了我以前常用的 tftp (Trivial File Transfer Protocol) – 改為 push 和 pull, 甚至可以從 PC install APK 到板子上. 此外, install 的線路可以選 USB 或是網路 (包括有線或無線).

如果對這個東西完全沒有概念, 可以想像在開發 SOC 的主機上安裝了一個 adb tool, 它與 Abdroid SOC 上的 adb "內奸" 建立連結之後, 就可以對 SOC 下達各種指令. 嗯, 聽起來像是木馬病毒…

關於 adb 的詳細用法, 可以參考下面的網站.

[安裝有關]

如何取得Android SDK並使用adb指令

[使用有關]

常用的 Android 指令與模擬器參數

網路使用 adb

不過最近很困擾的是, adb 跟我說安裝成功的 apk, 在平台上卻找不到? 如果安裝不成功也就罷了! 可能是連結失效 (error: device not found 或是 wait for device). 只要執行

adb kill-server

接著全部重來一次即可 (可用 adb startserver). 但說好的 apk 不見了還真是神奇? Google 了一下, 有位老兄的遭遇和我類似.

push apk以后找不到应用程序

但他是 push 到 /system/app, 第一次重啟後 Android 會對它做優化, 所以還能夠解釋. 但我應該是安裝到 /data/app, 狀況相對單純. 看來剩下兩個可能:

1. 相容性問題: 因為 apk 不相容, 所以不出現. 下次再試試

adb -s 172.2X.X.X:5555 install -f xxx.apk

2. 辦公室裡面有另外一塊板子的 IP 和我一樣, 我的 apk 全部安裝給他了??? 這個機率也不能說沒有, 哈!

美國三天兩夜遊

繼前公司的香港一日遊之後, 新公司派我到美國三天兩夜遊.

這段期間恰好是台灣和美國中小學生返國的高峰期, 所以飛機上很少看到旅行團, 但是有很多學生 – 包括從台灣去美國的小留學生, 和從美國回台灣的小遊學生.

不用說, 飛機的經濟艙是很難睡的, 所以我在去程的時候只小試了一下就放棄了, 改為全力看電影. 飛機上的電影往往是很新的, 不過長榮播的好幾部我都已經看過, 像是 “MIB3″, “超級戰艦" 和 “復仇者聯盟". 所以我看了另外的五部電影, 像是 “魔鏡魔鏡", “逆轉人生", “賭博啟示錄", 和 “火線反擊" 等等. 其中我印象最深的是 “詐欺遊戲 – 再生".

詐欺遊戲的男主角還是松田翔太飾演的秋山深一, 但是女主角換成了多部未華子飾演的筱宮優. 不只是經典的女主角消失了, 連我喜歡的配角雛形明子也默默換成了江角真紀子 – 雖然打扮得滿像的. 這次的遊戲很像大風吹, 21 個人要搶椅子坐, 30 分鐘內沒坐到就淘汰. 接著全體 (包括被淘汰的人 – 稱為"嘩嘩") 投票選出 leader, leader 再刪除一張椅子的編號, 進入下一輪大風吹. 坐在最後一張椅子上的優勝者得到 20 億元, 敗者負債一億.

原本我看了好一陣子也看不出 “必勝方 (法)", 等到秋山出來解答, 才知道幾乎沒有 “必勝方". 但是這個遊戲不在於誰是最後的優勝者, 而是誰能夠擁有優勝者的代幣. 優勝者為了讓大家可以選他當 leader (以刪除他人的椅子), 總得用點東西去賄賂別人, 所以他的代幣就會流到別人的手中. 也就是說, 表面上的贏家未必是真正的贏家!

當然, 女主角和前幾集一樣希望大家 win-win, 最後 21 個人也果真平分了 20 億拿去還債. 因為優勝者不用負債, 所以總共 20 億就夠了. 這裡面最有趣的環節就是如何行賄! 如果給嘩嘩很多代幣, 則對方會認為這個賄賂者本身沒有贏的動機, 不值得投票給他. 因此如何給代幣就是本劇最值得一看的地方了.

到了美國之後, 遇上慢吞吞的租車妹而花了不少時間. 最後沒吃成什麼大餐, 而試吃了吉野家. 這個吉野家分量比台灣大多了, 所以額外點的 cheese cake 我都吃不下.   

經過一夜輾轉反側, 第二天大家都是強打著精神去見客戶. 我想如果我們不去拜訪他們的話, 他們絕對不會主動玩我們的 EVB (evaluation board) 吧! 果真我們到了之後, 他們才從紙箱中取出在台灣 “非常缺貨" 的開發板, 看來已經閒置了一段時間. 接下來就是幫客戶安裝好所需的一切, 並且 demo 各種最新的功能.  

客戶看完 demo 還算滿意, 因為老美太習慣說 cool 和 great, 所以我也很難拿捏對方的滿意度有多高. 但是, 當他們要留下我帶去的 3 支大拇哥時, 我可是有點心痛, 因為那些都是我的私人財產, 有一支藍色的 8GB TDK 已經陪伴我好多年了. 本來想幫公司省錢, 這些小東西都沒有報帳, 但是白白送人就捨不得啦!

幸好客戶也希望簡化環境, 以便再 demo 給他的老闆看. 我臨時整理一下環境, 總計犧牲 8GB USB 兩枚, 和 8GB SD 卡一片就可以 demo Android 多分割畫面和 transcoding. 幸好 Charles 在出發前幫我改了一版 MPlayer, BK 也幫我試過 80 Mbps 的阿里山確實能 從  MPEG2 transcoding 成 3 Mbps H.264, 所以在工程端算是達成任務.

客戶的公司看起來很氣派, 完全不輸給旅館.

Customer Hotel

當然, 到了客戶那邊, 總是要自掏腰包請客戶吃飯. 我的對應窗口是個伊拉克人, 本來想請他介紹我吃他的家鄉菜, 不過因為附近正在修路, 所以我們改去一家他推薦的連鎖餐廳. 以致於兩天的午餐都是吃沙拉, 晚餐都是吃墨西哥餐. 顯然美式沙拉比墨西哥餐的賣相好, 吃起來也比較爽口.

墨西哥餐很簡單, 但是名字有點學問. 雖然我在 22 年前就獨自去過洛杉磯的 Taco Bell 探險, 但是老實說我直到現在還是不懂什麼是什麼, 只好去他們的網站撈點資料. 原來我第一天吃的是 Burritos 和照片中的 Taco, 第二天吃的是 Chalupas, 餅皮另外附, 沒有照到.

 脆皮  軟皮  軟皮  脆皮  脆皮  韌皮

吃完了機場餐, 當然就是坐飛機了. 很意外的我們也進了貴賓室. 洛杉磯機場的 International 貴賓室顧名思義是許多航空公司共用的, 由於人數太多, 無線網路品質不佳. 於是我跑到商務中心去看 web mail, 一看就看了兩三個小時, 完全忘記大吃大喝那回事, 還得小跑步才趕上登機.

老實說, 這個時候我很需要睡眠. 我的時區介於台灣和美國之間, 隨時都想睡但是睡不著. 然而飛機上依舊很難成眠, 勉強看了一部不知所云的 “普羅米修斯", 終於累到睡著了一會兒. 陸續死撐了 10 個小時, 總算回到台灣. 所幸出關前辦的自動通關很方便, 所以才清晨 6:30am 就進到了辦公室, 回家洗個澡, 接著忙到 9:00pm 才下班. 第二天是週六, 一直睡到 11:00am 才起床, 總算是把時差搞好了!

[在 Irvine 拍到的兩道彩虹, 希望不順利的事都雨過天晴]