Amazon的Fire Phone之於Android開發人員

來源:互聯網
上載者:User

標籤:des   android   style   class   blog   code   

在上周Amazon也耐不住加入了手機競爭行列之中,發布了自己的Fire Phone,於是Android家族又多了一位變種成員,Android系統的片段化程度也進一步加劇。因為工作的關係,我有幸在上個月就得到了一部工程機為其做提前開發,不過因為政策原因所以到現在才能來談談對這部新手機的看法。

對於Fire Phone的功能以及外觀,官方網站和各家技術網站都有了詳盡的介紹和報道,再者因為我拿到的是工程機,無法體現到完備的功能展現,因此本篇文章談的主要是Fire Phone對於開發人員而言所要面對的問題和狀況。

Android的心,iPhone的型

和其他所有廠商自訂的Android Phone一樣,Fire Phone也做出專屬的特點來區別出自己,不然使用者也就沒有理由要購買一部同質的設別。首先在按鍵上講,自3.0以後Android傳統上無論是實體的還是虛擬都保有3個按鍵:返回鍵(返回上一層頁面)、主屏鍵(返回手機主屏)、任務鍵(查看最近使用工作清單)。而Fire Phone去除了返回鍵和任務鍵,只留下了主屏鍵,看起來就像是一台更大螢幕的iPhone。

這對於很多開發人員來說是比較值得考慮的問題。因為有時候我們可能會假設所有Android裝置都有返回鍵,因此在介面設計時,為了美觀性和適用性等因素考略,而沒有在介面上加上返回按鈕。所以如果該程式放在Amazon的App Store上,使用者可能就會被困在沒有返回按鈕的介面中。

不過後來我們被Amazon的人員告知,其實裝置是有返回按鈕的,只是並非實體按鍵,而是要從裝置下方往上滑實現返回。如同從裝置上方往下滑可查看系統訊息一樣。這對於新使用者來說根本無從知曉,而只會責怪應用程式沒有提供返回功能致使他們困在某個介面下。

另一方面Fire Phone沒有任務鍵(可能它又是用什麼手勢開啟,但是目前我依然沒有發現),也就是說使用者無法在最近使用的工作列裏手動的將應用程式關閉。所以下次開啟依然是進入那個無法返回的介面,於是使用者可能就會厭煩這個程式而將其徹底刪除。

瀏覽Fire APIs

一款行動裝置的成功,很大原因在於它建立起來的生態環境:移動作業系統的擁有者不斷最佳化系統的功能和效能,並提供便捷的開發套件給開發人員生產相應的應用程式,進而吸引使用者使用該裝置,然後根據使用者的消費和需求再進一步提升和完善。

Amazon的Fire Phone也是希望打造這樣的生態環境,的表中就是Fire Phone所提供的開發介面,讓開發人員可以使用到Fire Phone與其他Android裝置不同的的特性和功能。但是對於這些API,在使用中真的對其表示無奈和歎息:怎麼能這麼糟糕。

開發人員可以在其網站上下載到這些API的文檔與相關的列子。瀏覽API,可以發現其設計的介面大部分的參數和傳回值都是intString這樣的基礎資料或者已定義的Enum成員,而不是Android常用的Intent、Bundle這些Parcel類型的資料。這樣的好處在於API非常容易理解的使用;壞處在於幾乎完全無法自訂功能和介面,只能遵循其給出的類型中做出選擇和使用。

比如其中的Home API,它是對應開發Fire Phone上的被其稱為HeroWidget的控制項。之前說了Fire Phone沒有找到程式最近使用列表,另外它也沒有傳統Android裝置的案頭,取而代之的是HeroWidget。應用程式按最近使用從左往右按carousel排列,每一個顯示項目上程式的表徵圖先佔了大半個螢幕,剩下的一半留著呈現一些應用內容。如果沒有對齊進行自訂開發,Amazon就會無恥的在上邊做自己的App廣告。

雖然本質上它應該就是Android的AppWidget,但呈現的方式只有Grid和List的兩種,List下也是定義好的4種樣式,完全無法自己定義,就連字型的顏色、大小都不能改變,還只能呈現大概20-30個英文字。完完全全就是為了Amazon賣東西用來展示商品的。

在原始的AppWidget裡,可以通過PendingIntent來啟動Activity、Service、BroadcastReceiver,Intent中可以存Action、Category、Data、Extra等等資訊。但是HeroWidget只能構建HeroWidgetIntent或者HeroWidgetActivityStarterIntent來啟動Service或者Activity,並且只能存放最長2048 bytes的String做為Extra資料。真是感覺又回到80年代,對於每個記憶體都要小心謹慎使用的日子。

其實Amazon的這個HeroWidget是非常好的設計,因為應用程式如同開店,也很注重回頭率。而怎麼讓使用者回頭,每個開發人員都在心力交瘁的思考,或者廣告推廣,或者Direct Mail,或是系統訊息召喚。Widget也是一種非常好的呈現新鮮事的途徑可以讓使用者點擊回到程式中。但是Amazon的樣式限制則會導致程式間在其上呈現的差異太小,字數限制又導致一言難盡吸引力不足,儲存資料的限制也導致開發時對字串自行做額外的分析處理。一個好東西就砸在Amazon手上吧,也許Amazon本來主要就是想自己用,開放給開發人員已經很客氣了。

對於其他的API也有或多或少類似的問題,如果想為Fire Phone提供相應的支援,就要忍受Amazon的限制。但是對於很多功能對於絕大多數應用來說都是可無的功能。比如3D效果個人覺得只對遊戲可能比較有意義,但是遊戲開發大多都有自己的3D引擎基本不需要Amazon的偽3D;Motion Gestures和Head Tracking恐怕也只會跟Samsung眼球控制一樣只是一個炫酷的功能,而非實用和常用的功能。想想看傾斜翻頁確實很酷,但是真的用起來肯定還是比如手指翻頁精準呢。

瞭解Amazon的Android SDK

不同於以往的Amazon發布的Kindle,這次發布的Fire Phone還提供了自己的略有不同的Android SDK。Fire Phone所實用的移動作業系統是基於Android 4.2.2,API Level 17深度定製的系統,所謂深度定製就是加上了上邊的所提到的那個功能以及跟Amazon的一些服務進行綁定等等。一般發布到Google Play的應用程式只要支援Level 17就可以安裝在Fire Phone上使用,得到Amazon的審批也能發布到其App Store上供更多使用者下載安裝。

但是要想使用之前提到的那些特別的API來支援Fire Phone特有的功能和特性,就必須使用Amazon提供的SDK來編譯和發布了。Amazon上有提供文檔教開發人員如何安裝Add-on,如何修改IED和設定檔來達到所需的編譯要求。(如果沒有Fire Phone實體機器做開發,Amazon也提供了一些Library和Apk來讓普通的裝置和模擬器變得可以支援HeroWidget展示,對於其他功能就必須要在實體機器上測試才是最好的。)

這一切都不難,問題在於它使Android 4.2.2,而最新的Android版本已經到了Android 4.4.2,API Level 19。有時候開發Android程式的時候會想用最新的功能但又要向後相容,所以常常會用到Build.VERSION_CODES。在我們的程式中就用到了 Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT的比較來支援KitKat版本的功能。結果換到Amazon的SDK,因為是4.2.2所以在Build.VERSION_CODES下沒有KITKAT的定義,所以全部變成Error。因此為了支援Amazon的新特性同時維護當前Android最新版本就免不了做相當大得改變,對於將來的長期維護投入也非常大。這也是Android片段化所帶來巨大的代價。

只能怪Amazon的定製太深入了,如果只是新增一些庫,而不是需要用完全不同的SDK進行編譯可能對開發人員帶來的麻煩就會小一些。但另一方面說來,要想在Android上做出差異來,這些就是難以避免的吧。

是否為Fire Phone做開發,這是個問題

Fire Phone現在剛剛出來,對於市場和使用者是如何反應還沒有結果。對於開發人員而言是否要為其做開發也是很大的問題,因為如果能早一步進入受使用者喜歡的市場,就能比其他人有一定的優勢。如果iOS最早期的開發人員都會覺得當時獲得使用者可要比現在簡單多了。但是如果市場不接受這個裝置,過早的投入其中也只是浪費時間和精力,比如Windows Phone。

我之前都在為iOS做開發,後來轉到了Android,雖然對Java總保有缺憾感,但是Java和Android的開發性和代碼的開源性是我非常喜愛的。對於開發中不明白的地方和API使用問題不在需要去猜測和實驗,可以直接通過閱讀源碼來找到答案,也可以通過瞭解源碼來熟悉整個系統代碼規範和編碼風格,這是非常有助於程式員成長的方式。但是Amazon的SDK並不是開放的,無法看到其原始碼,因此對於API的解讀只能從文檔和實驗中擷取,這也讓我非常不情願對Fire Phone進行開發。

每個人都會對Fire Phone有不同的評價和期望,有人覺得會賣得好,有人覺得賣得貴,有人覺得賣不出去,但是真得怎麼樣也只有等到更多人真正體驗之後才能知道。如同iPad以及iPad Mini剛出來的時候都覺得不會有好的市場結果後來證明這些尺寸卻正是使用者所需要的。也許Fire Phone的4個額外的網路攝影機的動作捕捉技術也會引領一個潮流也說不定。如果說以前使用觸控筆是一種單點技術,那麼使用手勢就是二維技術,那麼該是時候進入動作捕捉這樣的裝置三維技術了。

  歡迎到我的新部落格地址閱讀本文

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.