2010年5月21日

在 Android 2.2 Froyo 上開發者應該注意的事

froyo-android.png昨天是 Google I/O 大會的第一天,早上一起來就被 Day1 的部份 Session 嚇到說不出話,不是恐慌,是超級興奮。Google App Engine、GWT 這兩個一直有接觸的 Product 都有更新,而且是大幅更新。加上其他大大小小的更新,一天的時間根本來不及消化。

睡覺前照例打開 Google Reader 就收到 Android 2.2 SDK(Froyo) 發布的消息,不意外,但也來得太快了,本想說今天 Android Session 後才會發布,沒想到 Session 開始前就發布,大概可以猜出來今天又是熱熱鬧鬧的一天。

早上打開 Google Reader 前就有被 Android 2.2(Froyo) 攻佔版面的心裡準備,果不其然,十篇文章中有五篇是跟 Android 2.2(Froyo) 有關的報導,趕緊上官網下載新版本順便瞧瞧改了什麼。

一些新聞媒體會報導的改變就不說了,這裡主要是 Focus 在開發者應該會有興趣的改變。

版本更新

隨著新版本的發行,SDK Version 從 2.1 跳到 2.2,API Level 從 7 跳到 8。

有下載新版 SDK 的人應該會發現,存放 SDK 的資料夾,以往是以 SDK Version 做為資料夾名稱,現在則改成了 API Level。這跟當初 Java 在 1.5 的時候改名為 Java 5 有異曲同工之妙,Java 的說法是 5 比 1.5 看起來較威,難道 Android 改成 8 除了比較威,另外一個原因是為了壓過 Windows Mobile 7.0 跟 iPhone OS 4.0 嗎?
2010-05-21_132456.png

App2SD

眾所期盼可以安裝 App 到 SD card 上的功能在 2.2 上實現了,使用者在設定應用程式管理應用程式內可以看到新版本採用 Tab 區分不同類型的 App(以往是要按 Menu Key 選不同的 Filter 過濾出要看的 App),多了一個於 SD 卡的 Tab。
2010-05-21_141224.png

點選 Ap 後可以在手機內部記憶體跟 SD card 間自行搬移 App 存放的位置,前提是 App 要允許能夠安裝在 SD card 上。
2010-05-21_141335.png

為此,新版本 SDK 在 AndroidManifest.xml 內新增了 android:installLocation 屬性讓開發者決定程式是要安裝在內部記憶體還是 SD card 上,其值可以是 "internalOnly"、"auto"、"preferExternal" 三選一,但注意看 preferExternal 的說明

The application prefers to be installed on the external storage (SD card). There is no guarantee that the system will honor this request. The application might be installed on internal storage if the external media is unavailable or full, or if the application uses the forward-locking mechanism (not supported on external storage). Once installed, the user can move the application to either internal or external storage through the system settings.

但該做的事還是沒做,對開發者來說,Android 上並沒有一個很好的防盜版機制,雖然說 forward-locking 是防心酸的,但聊勝於無。現在安裝在 SD card 上的 App 連這一點點的小保護都拿掉了,這會讓更多開發商不想進入 Android 上阿。App2SD 對使用者來說是天大的好事,但開發商要的是防盜版機制,Android 快點拿出來吧。

雲端備份

這個功能真是太讚了,以往使用者重新安裝 App(非更新 App,更新 App 資料不會遺失),之前存在 Preferences 或內部 Cache 的資料會不見,如果要做到重安裝後還能保存之前的資料,要開發者自行處理。(嗚~我處理過)

現在備份這件事 Google 幫你作掉了,對開發者來說只需要撰寫一隻 Class Extend BackupAgentBackupAgentHelper,在程式內說明你要備份什麼資料,然後在 AndroidManifest.xml 設定一下 android:backupAgent,讓系統知道這隻 App 有備份功能。

需要備份時呼叫 BackupManagerdataChanged(),系統會在適當的時機呼叫你寫的備份 Class,然後把資料傳上 Google 自己的 Server。

當使用者重新安裝時,系統會自動把 Server 上的資料還原到手機內,背後的備份機制開發者完全不用理會,指定好要備份的檔案即可。

這功能還是 by User Account 的,用戶換手機後可以還原同一份資料,除非手機版本差異過大無法還原,照 Google 的說法,使用者完全感覺不到備份跟還原的存在,如果是這樣 User Experience 會非常好。

參考:Data Backup

OpenGL ES 2.0

在今年三月釋出的 Android NDK Revision 3 中已經支援 OpenGL ES 2.0,不過對於不會寫 C 的開發者來說,這功能離真正應用稍微遠了點。現在 SDK 內新增了跟 NDK 內的 OpenGL ES 2.0 直接對應的接口(稱 Wrapper 好像比較恰當),Java 開發者可以無痛直接呼叫 OpenGL ES 2.0 來使用。

效能應該會比原生 C 語言差一點,不過可以用、開發快速最重要,開發遊戲的人應該很高興看到這一點。

語音辨識

對提供語音辨識的廠商來說,新版本 SDK 允許第三方應用程式以 Plug-In 的方式,透過 RecognitionService 加入自己的語音辨識引擎。

以往在 Android 內有語音辨識需求時,都要打開某個 App 才能使用,例如 Google Voice 或是 Voice Go,現在則是可以讓使用者設定喜歡的語音辨識引擎,當有辨識需求時系統會自動呼叫辨識引擎,等於是主動幫你打開 App 使用。

原有舊版本在設定中的文字轉語音則被改成語音輸入裝置與輸出裝置,裡面整合了原有的文字轉語音語音輸出裝置)以及新加入的語音輸入,如果手機安裝了第三方的語音辨識引擎,就會出現在這裡。

這是安裝了 Android Sample Code 中的語音辨識引擎範例後的樣子(語音辨識引擎範例在 SDK 目錄下的 \samples\android-8\VoiceRecognitionService
2010-05-21_151114.png

對 App 開發者來說,當有語音辨識需求時,直接傳送 RecognizerIntent 給系統,系統會呼叫適當的語音辨識引擎來辨識,辨識完再把結果透過 RecognitionListener 回傳給 App,多美好的畫面阿,賽微科技,衝阿。

PS: 賽微科技已在 Android 上發表語音辨識輸入法(賽微輕鬆說)跟應用軟體(Voice Go),個人使用過覺得辨識度已經很好,去下載來玩玩吧。

強化的照相機

新版本 Android 提高了拍照時預覽的畫面更新率(Framerate),從 10 幾 FPS 增加到 20 幾 FPS,不過這只有拿到實機時才能驗證了。

另外新的 Camera Class 允許程式控制預覽時的 Zoom Level(呼叫 startSmoothZoom()),或是使用者改變 Zoom Level 時透過 OnZoomChangeListener 主動通知 App。

預覽時畫面的方向也不再固定是右撇子順手的橫向,可以透過呼叫 setDisplayOrientation() 來改變,有 0、90、180、270 四種可選。

Camera.Parameters 則提供了更多參數可以設定給 Camera 或是從 Camera 取得。還有 ThumbnailUtils 這隻小工具可以替圖片、影片產生縮圖。

放大縮小手勢

在支援 MultiTouch 的情況下,用戶最常使用的應該是用雙指來放大縮小螢幕上的圖片或網頁,以往都要自己寫程式碼來偵測放大縮小,現在新版本 SDK 新增 ScaleGestureDetector 讓開發者直接引用,不需要再自己寫啦。

原始碼在這,不知道有沒有人要改寫成支援 SDK 1.5 的版本,也就是第二指的 X、Y 座標是透過 MotionEvent.toString() 取得的版本,造福大家。

莫名其妙

ViewGroup.LayoutParamsfill_parent 被 deprecate,改成使用 match_parent,雖說 fill_parent 還是可以繼續使用,但沒事改這幹嘛?

Bug 回報

現在程式開發人員可以在 Developer Console 中看到自己程式的 Bug Report 了,這非 2.2 開發的程式限定,不管任何版本的程式都可以使用,主要是 Android 的手機都有一隻叫 BugReport 的系統程式在背景執行,

這對開發者來說真是一大福音,雖然無法精確到是哪個使用者做什麼動作造成的,但起碼可以知道程式是不是有發生大問題。如果還能看到使用者的評論跟線上回覆的功能就真的太美好了(做夢中)。
2010-05-21_162826.png

最後

Android 官網上關於 Android 2.2 更新的網頁中,跟開發者比較有關的是 Android 2.2 Platform 這一頁,文中大部份都是從這頁中擷取出來。有一些本身比較少遇到的 Topic,例如 MediaDevice policy managerAccounts and sync 就沒特別拉出來說明。

官網上的許多文章也隨著新版本釋出同步更新,Android Blog 中也有一篇介紹了這次的更新,那些都值得開發者一看。

這次新版本發表,扣掉這些跟開發者比較有關的項目,使用者應該也能很明顯感受到改變,Froyo 加入了 JIT Compilation、瀏覽器換上 V8 Javascript Engine,速度都大幅增加,光是這兩點就值得更新。

軟體 OK 了,接下來換硬體,會是搭載 Froyo 的手機先上市,或是 Nexus One 會先更新呢?Nexus Two 快出現吧

Related Posts Plugin for WordPress, Blogger...