早在2009年我便開始研究Android。當時,Android 1.5剛剛發(fā)布并且顯示出巨大的發(fā)展?jié)摿Α?/section>在2009年7月,得益于澳大利亞的一位朋友,我拿到了第一臺運行Android操作系統(tǒng)的設備,這臺設備就是運行Android 1.5的HTC Magic手機。說實話,這臺設備的運行速度比我想象的要慢,但是我依然通過它開始研究Android的API,并且根據(jù)自己的需求開發(fā)應用程序,然后在這臺設備上運行這些應用。當時,我預感到Android會獲得更多人的關注,我相信如果我能為Android開發(fā)一款應用程序,這款應用程序一定能被許多人使用。事實證明,我的預感是正確的。不久后,Android開發(fā)的大幕便拉開了,而且發(fā)展得越來越快。一時間,許多支持Android平臺的工具和第三方開發(fā)庫便涌現(xiàn)出來,從cocos2d-x這樣的游戲框架到Apache Maven這樣的編譯系統(tǒng),幾乎無所不包。2010年11月,我受邀審閱Manning出版社出版的《Android in Practice》(www.manning.com/collins/)一書。當深度參與到這項工作之后,我突然想到,我可以用另一種方法寫一本Android開發(fā)的書。我打算模仿Joshua Bloch所著的《Effective Java》(www.amazon.com/Effective-Java2nd-Joshua-Bloch/dp/0321356683)一書的風格,向讀者展示這些年來我在Android開發(fā)過程中總結的小竅門和開發(fā)模式。從根本上講,我想在一本書里涵蓋開發(fā)過程中總結的我知道的所有小竅門,并為這些小竅門提供一定的解釋性文檔。本書匯聚了開發(fā)與眾不同的Android應用程序所需要的技巧和竅門。我喜歡《Effective Java》一書的原因是,這本書沒有特定的章節(jié)順序,因此可以自由學習不同章節(jié)的內容。每隔一段時間,當回顧此書時,我總能為當前項目找到一些不同的應用程序。在寫這本書的時候,我一直牢記一個信條:我想象讀者在上班路上或者睡覺前會有興趣學習本書里的某個Hack,并且從這個Hack中獲得對當前項目有益的啟發(fā)。我已經(jīng)在新項目中應用了這本書的內容,我會在特定的工作任務中復用書中的示例代碼,使用示例代碼向同事解釋特定的開發(fā)模式。實踐證明,本書對我是十分有用的,當然,我也希望這本書對你同樣有用。撰寫本書以及書中的示例代碼時,我把最小SDK版本設置為1.6。如非特別提及,本書中多數(shù)技巧都適用于Android 1.6及其以上版本。你會注意到,有一些技巧只適用于最新版本的Android,但是多數(shù)建議和技巧都適用于所有版本。每個Hack都提供一個圖標,用來表示這個Hack適用的最低SDK版本。那么接下來,你就從本書的目錄中挑選自己感興趣的技巧開始學習吧。希望你能從我寫的內容中學到盡可能多的知識。每當讀到其他書的致謝時,我總會驚訝作者感謝的人竟然如此之多?,F(xiàn)在終于明白為什么需要感謝這么多人,當寫到這里的時候,我很緊張,生怕遺漏了某個人。首先,我要感謝的是編輯Cynthia Kane,她幫助我加工整理整本書的內容。她不僅指出本書中需要修改的每個地方,還處理我英語語言上需要潤色的地方,并且?guī)椭依斫鈭D書出版過程中的每個關鍵環(huán)節(jié)。修訂每一行文字,修改她發(fā)現(xiàn)的每一個不足之處,通過這個反復迭代的修正過程,終于完成了這本值得我驕傲的書。其次應該感謝Nicholas Chase,Nick負責支持Manning出版社的XML文檔結構和創(chuàng)作工具。幸運的是,每當我有問題需要請教他時,他的Skype總是在線。Manning出版團隊的其他成員也參與了大量工作。參與這項工作的有Ozren Harlovic、Kevin Sullivan、Tara McGoldrick Walsh、Benjamin Berg、Katie Tennant、Candace Gillhoolley、Martin Murtonen、Michael Stephens以及Maureen Spencer。感謝我的合著者:William Sanville(Hack 40和Hack 41)、Chris King(Hack 26)以及Christopher Orr(Hack 50)。他們分享了在這些領域的專業(yè)知識。感謝Cyril Mottier,他深入閱讀了本書,并且毫不保留地指出書中他不喜歡或者認為需要改進的地方。他始終對本書保持高要求,我很喜歡跟他合作。非常感謝!感謝我在NASA Trained Monkeys公司的合作伙伴們。他們幫助我審閱了書中大部分內容,并提出很多建設性意見。大部分很酷的Hack標題都來源于他們豐富的想象力。感謝Android社區(qū),特別感謝那些對開源軟件庫有貢獻的人們。(這里只提及幾個人的名字,他們是:Michael Burton、 Manfred Moser、Matthias K.ppler、Jake Wharton、Jeremy Feinstein、cocos2d-x團隊、Jan Berkel、Jeff Gilgelt、Xavi Rigau、Chris Banes、James Brechtel和Dmitry Skiba)。感謝審閱本書的每一個人。你們的審閱意見幫助我及時發(fā)現(xiàn)疏漏的地方以及需要強化的主題。從我敬佩的人那里獲得正面的評價是很有意義的事情。感謝以下審閱者,你們在百忙之中審閱本書,我也希望這本書對你們有一些啟發(fā),這些人是:Adam Koch、Alberto Pose、Bill Cruise、Christian Badenas、Frank Ableson、Ignacio Luciani、Jeff Goldschrafe、Joshua Skinner、MatthiasK.ppler、Maximiliano Gomez Vidal、“Ming”、Octavian Damiean、Paul Butcher、Robi Sen、Roger Binns、Shan Coster、Suzanne Alexandra和Will Turnage。最后要感謝Mili,你的工作同樣重要,每當我需要幫助的時候,你總是在我身邊。我愛你。Android是一個發(fā)展勢頭很好的項目。Android的第一個正式版本(Android 1.0)發(fā)布于2008年9月23日,截至2010年年底,Android已經(jīng)發(fā)展成為首要的智能手機平臺。每當有新版本發(fā)布,Android都會引入一組新的API和新特性。盡管在Android 1.5[1]的時期,市場上只有HTC Dream手機運行Android系統(tǒng),但是發(fā)展至今,Android系統(tǒng)不僅可以運行在從手機到電視等多種設備上,還可以運行在不同屏幕大小的平板電腦和筆記本電腦上。上述情況給Android開發(fā)者帶來了兩個不小的難題。第一個難題是開發(fā)者必須面對和適配Android支持的不同類型的設備。雖然有很多方法處理不同的屏幕尺寸和像素密度,但是開發(fā)者必須開發(fā)出能夠運行在各種設備上并且顯示正常的應用。另外,需要對各種Android設備可能導致的用戶體驗不一致的情況做出處理。用戶對手機和電視的使用習慣是不同的。第二個難題是Android的版本更新問題。這個難題是周而復始的:使用新版本的Android系統(tǒng),意味著開發(fā)者可以使用新的API,新的API可以為應用程序增加優(yōu)秀的功能;但是開發(fā)者必須同時支持舊的Android版本,因為并不是每個用戶都會升級系統(tǒng),而且目標用戶獲取和認可應用程序也需要一定時間。開發(fā)者需要在兩者之間做出選擇:要么使用新的API功能并發(fā)布一個特定版本的應用,滿足那些使用新版本Android系統(tǒng)的用戶;要么采取折中的方法,保證一些新的功能只適用于新版本的Android系統(tǒng)。上述選擇最終都由Android開發(fā)者決定,因此我寫這本書的目的是幫助開發(fā)者解決這個難題。本書以“問題/解決方案”的形式提出開發(fā)過程中遇到的問題并給出其解決方法,并對一些已有問題提供了進一步的處理方案。Android是一個基于Linux內核的開源操作系統(tǒng)。起初,Android只支持手機設備,但是發(fā)展到現(xiàn)在,Android可以運行于平板電腦、電視、電腦甚至汽車音響等多種設備。Android在移動領域贏得了巨大的發(fā)展空間,到目前為止,50%以上的移動設備運行了Android操作系統(tǒng)。運行在Android操作系統(tǒng)上的應用通常使用Java語言開發(fā),Android提供了一個強大的SDK(軟件開發(fā)工具包)供開發(fā)者開發(fā)不同類型的應用程序。Android允許開發(fā)者定制幾乎所有模塊,例如,開發(fā)者可以開發(fā)定制的墻紙、鍵盤、桌面以及在其他平臺上想都不敢想的功能。本書適用于已經(jīng)學習過Android開發(fā)的程序員,并且假定讀者已經(jīng)熟悉Java編程語言,并理解Android平臺的基本概念。本書不僅提供適用于Android初學者的技巧,還提供適用于高級開發(fā)者的技巧。如果讀者正在開發(fā)Android應用程序,我相信通過本書,你可以學到很多有幫助的知識。你正在尋找新的方法解決編程中出現(xiàn)的問題嗎?我的建議是:在讀者學習每一條Hack前,先編譯并運行示例代碼,這樣有助于讀者更好地理解每個案例。此外,讀者不需要按照特定順序學習本書,讀者可以隨時跳轉到自己感興趣的章節(jié)開始學習。雖然讀者可以靈活選擇自己感興趣的部分學習,不會因為前后章節(jié)順序的原因出現(xiàn)閱讀困難,但是讀者仍然可以按順序閱讀本書。各章節(jié)的概要內容如下:第2章包含4個Hack,介紹動畫處理相關的小竅門。第3章包含9個Hack,涵蓋與View相關的小竅門。第4章包含兩個Hack,概括除IDE以外的可用工具。第5章包含4個Hack,提供適用于Android開發(fā)的模式示例。第6章包含7個Hack,提供一組適用于ListView和Adapter類的小竅門。第7章包含兩個Hack,解釋如何在應用中使用第三方庫。第8章包含兩個Hack,通過一些例子,解釋如何用Java以外的編程語言為Android編寫程序。其中一個Hack分析如何與Objective-C語言交互,另一個Hack分析如何與Scala語言交互。第9章包含6個Hack,提供一些可以復用的代碼片段。第10章包含3個Hack,展示一些使用數(shù)據(jù)庫的高級技巧。第11章包含4個Hack,展示如何令應用程序運行在不同的Android版本上。第12章通過最后3個技巧提供如何構建應用的小竅門。本書所有示例代碼都以monospace字體顯示。注釋直接寫在代碼中,對于較長的注釋,使用數(shù)字編號標識。本書所有示例代碼都可以從出版社網(wǎng)站下載,出版社網(wǎng)址是www.manning.com/50AndroidHacks[2]。讀者也可以從Google公司的code項目中下載源代碼,下載最新示例代碼的方法列在附錄中。此外,示例代碼托管在GitHub中,讀者還可以
從https://github.com/Macarse/50AH-code下載。
如果讀者不知道如何安裝,我建議首先訪問http://developer.android.com/sdk/installing/index.html,這里提供了配置開發(fā)環(huán)境的簡單步驟。Manning出版社運營的網(wǎng)上論壇為本書提供免費的在線支持。讀者可以通過該論壇發(fā)表關于本書的意見和建議,也可以提問技術問題,還可以從作者和其他讀者處得到幫助和支持。訪問和訂閱該論壇的方法很簡單,讀者只需要在瀏覽器中輸入以下網(wǎng)址:www.manning.com/50AnroidHacks。這個網(wǎng)頁提供了論壇注冊后的注意事項、讀者服務以及論壇規(guī)則等信息。Manning出版社對讀者的承諾是:提供一個在讀者和讀者之間,以及讀者和作者之間可以產(chǎn)生良好互動的交流場所。出版社并不能保證作者有充足的時間與讀者互動,因為作者完全是自愿且免費為論壇服務的。我們建議讀者多向作者提問一些有挑戰(zhàn)的問題,以激發(fā)作者答疑的興趣。本書出版后,讀者可以從出版社的網(wǎng)站訪問作者在線支持論壇查看已有的討論帖。Carlos Sessa不僅是一位充滿激情的全職Android開發(fā)者,同時,他也是一家移動開發(fā)公司的創(chuàng)始人,公司名稱為NASA Trained Monkeys,位于阿根廷的布宜諾斯艾利斯。他的公司專注于為Android和iOS等移動開發(fā)平臺提供解決方案。[1] 代號Cupcake,紙杯蛋糕?!g者注
[2] 截止本書翻譯時,該網(wǎng)址已經(jīng)更改為http://www.manning.com/sessa/?!g者注
本書英文版封面插圖中的人物是一個樵夫。這幅插圖取自Sylvain Maréchal所著的四卷《區(qū)域服飾習俗概要》,該書于19世紀在法國出版。書中每幅插圖都經(jīng)過精心繪制和手工著色。通過大量豐富多彩的圖片,Maréchal向我們生動地展示了如何從文化上區(qū)分200年前世界上不同的城鎮(zhèn)和地區(qū)。由于彼此隔絕,不同地區(qū)的人們說著不同的方言和語言。無論是在街道還是在鄉(xiāng)間,我們可以僅僅根據(jù)服飾區(qū)分出人們生活的區(qū)域、職業(yè)以及狀況。此后,著裝要求和區(qū)域服飾的多樣化發(fā)生了變化,當時豐富多彩的服飾也逐漸消失?,F(xiàn)在已經(jīng)很難區(qū)分不同大陸的居民,就更不用說區(qū)分不同的城鎮(zhèn)和地區(qū)的居民了。或許,我們以文化的多樣性為代價換來了豐富多彩的個人生活,當然,換來的是更多樣、更快節(jié)奏的科技生活。當計算機書籍千篇一律,讀者很難一次就區(qū)分出不同的計算機書籍的時候,Manning出版社贊賞計算機業(yè)務部門通過圖書封面呈現(xiàn)多樣性的創(chuàng)造思維和主動性,本書便以Maréchal描繪的兩個世紀前不同區(qū)域的豐富多彩和活靈活現(xiàn)的生活寫照來體現(xiàn)這種多樣性。