Tuesday, August 09, 2011

Android 3.x與手機?


因為有一些人對Android 3與手機的關聯無法搭上線,在這邊記錄一些FAQ:

1. 手機應該和android 3無關吧!小弟還特別到官網讀了正式文件,確認android 3是給平板電腦用的,android 2才是給手機用的,後續或許會整合,但那是以後的事了不是嗎?

Android 3是Android最新版號,而且向下相容多數API。用Android 3.2 SDK來開發2.x版本(手機)的應用程式完全沒有問題。

第四版主要使用3.x的SDK,只有要使用手機的虛擬機器時,才使用2.x SDK提供的虛擬機器(因為3.x SDK中只附了平板虛擬機器,沒有附手機版的虛擬機器)。採用本書寫法的話,程式在平板和手機上都能正常運行。您可以拿您手邊現有的任一開發中App來測、或等拿到書的時候照著試試,看看是不是確實能在3.x SDK上開發手機應用程式。

2. 本書既然叫Android 3,卻沒有講平板用的fragment API?
首先,這是一本入門書。這本書內容和其他同類書籍不同,關注的是跨版本的基礎知識(所以書名叫「入門」)。封面說明的部份有寫,想傳達的是用這本入門,就算是更新的版本拿來一樣適用。在寫現在版本時想的是善用開發工具、與市面上主流版本相容,而非關注新功能。

而現在平板在Android系統中的市佔率 1.2%,要撐起書市還不到時機(個人意見)。一般入門的開發者(本書的預設讀者群)會專為了1.2%的使用者而開發?我認為不會。

有些開發基礎,而又看過我的書的人,應該知道我一貫建議去官方網站查這些進階的API,而不是苦苦等中文書。


平板的fragment API(將畫面分隔的API)有兩種版本,一種是向後相容版,可以跑在Android 2.x 機種上。另一種是原生版,只能跑在3.x Tablet上。根據我個人的評估,這兩種API還會有某種程度的改動,除非是專為了平板而開發,不然學習fragment API還不是時候(也許等到Ice Cream Sandwich?)

3. 看第四版的目錄好像沒有講到Android 3的特性?
其實各種新東西講了不少,但都已經整合在各個章節中,融入了整個學習過程裡。

在主要開發手機應用程式的情況下, 2.x 和 3.x 還有什麼差別哩?3.x版為了平板做很多事情,若是還繼續用 2.x SDK開發,程式放到Tablet上會有些"不太Native"的感覺,如選單會出現在平板的下方,而不是如其他內建應用程式顯示Action Bar在上方。

比起專為平板設計一份程式碼,在Android上要解決這些問題較容易。本入門書第四版的目標是「寫一次,就能在手機、平板、Google TV等設備上執行」。

因此我是以這樣的想法,以手機為主,在維持本書架構的開發過程中,加入更多實際經驗與技巧,來協助Android應用程式開發的入門者或剛接觸平板等機種的開發者。第四版除了圖片重新擷取之外,內容大概有30~40%的改動。新版加入了一些新章節,介紹了選單、關連選單、App Widget(桌面小工具)與平板相容設定。還加上了AsyncTask、Admob等章節,在主要使用者為手機的情形下,也能讓平板的使用者得到不錯的使用經驗。

「雖然平板等機種的數量少,但如果不麻煩的話,還是盡可能支援吧?」如果您贊同這樣的想法,那看這本書可以得到您想要的。


不必懷疑,這是我的誠意之作


PS: 本書歷版以來都追求和市面其他書籍不同,不求全,只追求初學者透過本書能確實理解Android應用程式開發,並能投入實用。我一直以支持入門者的想法來改版或寫作。除非是spam,不然大可不必揣測我會隨意砍誰的回覆。

2 意見:

Anonymous said...

1. 主要使用3.x的SDK,只有要使用手機的虛擬機器時,才使用2.x SDK提供的虛擬機器

Q:"主要使用3.x的SDK"的意思是使用3.x SDK的開發工具,或是3.x的API?
如果只是使用3.x SDK的開發工具來開發手機程式(android 2.x的程式專案,也就是只使用2.X的API),並沒有什麼技術上的意義,只不過換了新版的開發工具,其實操作過程是一樣的,和android 2的手機程式完全沒有差別。
如果有使用3.x以上的API,那麼是不可以在手機上執行,只能在android 3的平板電腦執行。
因此這句話小弟並不了解它在android程式技術上的意義?

2. 採用本書寫法的話,程式在平板和手機上都能正常運行。
Q:平板電腦幾乎百分之百向下相容手機程式,即使是用您前版書籍中的程式,還是能正常執行,市面上其他android書籍的程式也能夠在android 3的平台上執行

3. 平板的fragment API(將畫面分隔的API)有兩種版本,一種是向後相容版,可以跑在Android 2.x 機種上。另一種是原生版,只能跑在3.x Tablet上。
Q:android 3的fragment小弟已經study一些時間,倒是不知道還有區分成可以在android 2執行的版本,願聞其詳,或是能請您惠賜一個能在手機上執行的fragment程式。

根據您的解說,小弟個人認為新書只是說明如何讓android 2.x程式能在android 3平台上有比較近似android 3 native程式的畫面,但其實骨子裡還是android 2的程式。你我都是在程式設計領域裡打滾多年的人,平心而論,這究竟含括了多少比例的android 3新的技術主題,將它稱為android 3手機程式究竟適不適合?

對於您感覺小弟的文章不太客氣,這裡先向您致歉,不過這是比較嚴肅的技術討論,因此難免會嚴肅一些,但完全是就事論事,並沒有任何情緒上的字眼和人身的攻擊,還請您多多包涵!

gasolin said...

android 3 API有向後相容,因此用2.x手機程式, 3.x平板程式來區分只是一般便利的說法。

用最新SDK開發時,3.x以上的API有部分內容是可以向下相容的,如ActionBar相關的新XML屬性,雖然舊版本認不得,但在新版本的設備上就會產生作用。如果仍然使用前一版在程式碼中定義選單的方式,那麼就無法享受到寫一次就同時能在手機、平板上跑的好處。這部份當然是 3.x API。

請理解本書的寫作目標,本改版的目的是讓所有初學者都能寫出能同時在平板和手機上跑的好的App。補足前一個版本發表時所缺乏的部份。

基本上用2.x編譯可以在平板上執行是正確的,如果您有實際平板開發經驗,"能正常執行"和"有原生介面"還是有差距的,新改版中詳述了這些小技巧。當然,所有的資料網路上都查的到,不見得要買書。但如果要買一本來入門的話,我相信我這本還不錯:)

本書一直都不是那種將新版API全部介紹一遍的書。本書的目的是盡量解決所有初學者都碰的到的問題,而且指出如何透過官方網站或各種網路資源來學習進階API,所以新版對這部份的內容也有所加強。

至於向後相容版,請研究在開發環境裡就可以下載到的Android Compatibility Package,裡面除了相容到Android 1.6的fragment API之外,還有些其他有趣的東西喔 :)