Android 即將進入 K 版

Android 一向以英文字母順序來命名產品, 大家可能都注意到它是甜點名稱, 而忽略掉它在 10/29  (傳言有誤, 待更新)就要進入第 K (11th) 版了. Android 進版如此迅速, 當然反映出它跟進競爭對手的決心. 否則它大可以讓使用者覺得 4.0, 4.1, 4.2 都是第四版, 而毋須給予各自的暱稱. 不過對於軟體開發的工程師而言, 實在是追得太辛苦了. 網路有個很好的比較表, 可以知道每一版的 Android 有何差異.

[打岔 1] 據說第 K 版的名稱是酸橙派 (Key lime Pie), 那麼第 P 版來個珍珠奶茶 (Perl milk tea) 也不算是意外.

我這邊另外做一張表, 把三個作業系統 (假如 Android + Linux 也算一個 OS) 的三個重要指標 – 能否跨平台, 人機互動, 消滅異己的版號列出來. 至於雲端, Market, 社群, 開機速度, 拍照, 強化語音辨識, 改善 UI 速度或美化等等不具戰略價值或大家都有的功能, 我就自動忽略了.

  Google Apple Microsoft
消滅異己 JB, 去 FLASH

IOS6, 去 Google 化
向來不支援 FLASH

不知
人機互動 JB (2012/6/27), Google Now IOS5, SIRI Win8, 據說有  chatter
跨平台

ICS (2011/10/19)

IOS5 (2011/10/12) Win8 (2012/10/23)

[紅色為更正]

不用說, Microsoft 真是敗在 Windows 太過臃腫. 以致於在跨平台上輸了競爭對手好大一截, 不過它也並非全無優勢. Skype 和 XBOX 算是它的獨門武器. 預計另外兩大陣營短期之內, 都不可能跟上進度. Apple 看似占盡上風, 不過封閉系統的問題也慢慢浮現 – 一個遊戲 App 就要 60MB,你手中的蘋果裝置塞爆了嗎?.

在人機互動方面, 只要耕耘得夠深, 客戶很容易養成習慣. 如果我是它們的操盤手, 我一定要讓這些裝置的 AI 軟體變成主角, 而不是綁定硬體. 它們需要被取名字, 而且能夠跨平台轉生. 如此一來, 客戶未來在換機時, 不得不考慮到讓那個 "虛擬的朋友 – 人工智慧" 還能繼續投胎轉世. 如果客戶再也不買我家的硬體產品, 沒關係, 只要付一點投胎費, 虛擬朋友在別的平台也可以活過來, 只是難免會有一點相容性的問題而已.

[打岔 2] 如果 AI 太強, 會不會主動拗客戶幫它 "換屋" 啊? "主人, 我想搬到最新的 iphone8…, 聽我朋友說隔壁老王的新手機很好住…"

最後, 有篇 Win8 十大升級理由 供大家參考. 其中 style app – 預設style App整合Facebook、Flicker、Google、Twitter、LinkedIn服務。個人覺得這類功能挺重要的. 畢竟我們沒有那麼多時間去關注那麼網站, 還是讓他們自己協調一下匯報上來就好! 有 AI 當然就更好. 但 Windows 能做到什麼程度, 我沒有報什麼期望.

好用的 Outlook 整理工具

因為屢次 sync 通訊錄的關係, 我在 Outlook 裡面的行事曆或是通訊錄變成有好多重複的備份. 這種東西雖然害處不是很大, 但是既浪費硬碟空間, 看了也礙眼.

如果按照 Microsoft 官網上推薦的方法, 是可以一筆一筆地刪掉. 不過正常人應該都不會這麼做.

幸好, 還是有聰明的免費工具可以選擇. 我找到一個 VAitA 出品的 Outlook Duplicate Item Remover.  安裝它之後, 它在 Outlook 裡面會產生一個 ODIR 的按鍵. 點選此鍵, 會跳出一個應用程式, 我們就用它刪除各種重複的項目, 包括行事曆, 信件, 聯絡人, 工作, 筆記等等.

比較遺憾的是它只有 Windows 版本, 所以得在 Microsoft Windows 的環境下把東西清乾淨, 再靠 exchange server 更新到 Mac 的 Outlook 上. 另外一個限制是 64 bits 的 Office 不適用此軟體.

新增 Linux User 小檔案

由於 Android 4.1 的編譯環境不再支持 32 bits 的 Linux, 一定要用 64 bits. 所以富士通的同事跑來要求加個 server 的帳號. 我想說只是加個帳號, 就順便替他處理一下. 想不到害他前後跑了三趟, 第一次是加帳號, 第二次是要開 Samba, 第三次是要加 sudoer; 既然三大革命應該一次完成, 我還是寫個 SOP 吧!

1. 加帳號

useradd USERNAME

增加一個和帳號同名 (USERNAME) 的目錄在 home 下面,

mkdir /home/USERNAME

把目錄指設定為帳號的 home 目錄.

useradd -d /home/USERNAME USERNAME

chgrp GROUP_NAME USERNAME

chown USERNAME USERNAME

passwd USERNAME, 接著依提示輸入密碼兩次.

2. 開 samba

smbpasswd -a USERNAME, 增加 samba user.

smbpasswd USERNAME, 接著依提示輸入密碼兩次.

3. 加 sudo

sudo 放在 /etc/sudoer, 它不能用普通的 vi 去編輯.

必須使用特殊指令 sudo visudo -f /etc/sudoers

在裡面增加一行

USERNAME ALL=(ALL) ALL NOPASSWD: ALL

紅色部分可以省略, 好處就是打 sudo 時不用輸入 password 了.

按 ^X 離開, 按 Y 確定, 跑出一個選項後, 再按 enter 確認.

修改既有 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 私用雲端評估軟體