上週結束了比利時拜訪之旅,本週我又馬上跑去倫敦的谷歌辦公室。很榮幸的有機會可以向倫敦的行動裝置開發者介紹Android,並且共同集思廣益,來討論Android應用程序上的意見和需要改進的地方。
討論的當下,我見識到這群開發者積極的想踏出第一步,並且願意花費時間進行開發工作。首先有人著手開發Android益智選擇題遊戲,從選單當中,選擇正確的答案。小遊戲放在伺服器上面,可以供大家下載。這是他們第一次嘗試的專案。
這個禮拜還沒結束,不過卻又激發出更多的創意想法。
在倫敦辦事處:這一切是如此美好。還能享用下午茶的蛋糕。
隨著假期逼近,別忘了最新版本的SDK即將問世,在享受假期的同時,千萬別忘記樂在Android開發,抓住Android起飛的時候。
祝大家假期愉快。
發文者
原文出處 On the Road with Android
2007年12月19日 星期三
2007年12月14日 星期五
Android官方部落格翻譯:殘酷人生;SDK急速上手篇(Life can be tough; here are a few SDK improvements to make it a little easier)
距離我們釋放出Android SDK第一版,已經過了一個月了,我們盡力讓開發工具變的更盡善盡美,讓大家都能夠喜歡,希望這個過程不會太久,當然我們還有一些問題需要解決。同時,我們很高興的為你介紹m3-rc37a(最新版本!)。
我們的伺服器會將最新的資訊,傳送給你知道。如果你想要馬上體驗新版本,在下載之前,這裡有一些建議事項:
我們希望這些不起眼的改變,能讓你的生活變的更美好,至少可以縮短你寫程式的時間。
發文者 Quang Nguyen, Developer Advocate at 3:13 PM
原文出處 Life can be tough; here are a few SDK improvements to make it a little easier
我們的伺服器會將最新的資訊,傳送給你知道。如果你想要馬上體驗新版本,在下載之前,這裡有一些建議事項:
- 新的預設模擬器是HVGA,你可以使用新模擬器來參加Android開發挑戰賽。
- 我們在模擬器當中,加入了SMS簡訊的調試功能,你可以更方便用來做簡訊測試。
- 修正在Window作業系統下,音效模擬錯誤的問題。
- 新的模擬器可以用來控制連線事件,例如網路狀態和來電狀態。
- Eclipse插件修復,現在打開XML檔案,可以按造語法顯示顏色了,例如AndroidManifest.xml檔。
- Eclipse插件錯誤修正,例如系統重起的時候,R.java檔不會再是唯讀狀態。
我們希望這些不起眼的改變,能讓你的生活變的更美好,至少可以縮短你寫程式的時間。
發文者 Quang Nguyen, Developer Advocate at 3:13 PM
原文出處 Life can be tough; here are a few SDK improvements to make it a little easier
2007年12月5日 星期三
Android官方部落格翻譯:谷歌開發者的撥客頻道:安卓(Google Developer Podcast: Android)
Dianne Hackborn和Jason Parks這兩位是在Android開發團隊中的工程師,今天將在本撥客頻道(in this podcast),用技術角度來和我們談談Android平台。
Dianne和Jason分享在Be和PalmSource的背景狀況,並且暢談他們在Android上,已經被使用的經驗談:
Dianne和Jason分享在Be和PalmSource的背景狀況,並且暢談他們在Android上,已經被使用的經驗談:
- 開發中的一些小故事
- Android的頂層。Linux程序如何處理和管理虛擬器。
- Dalvik虛擬器,如何在小型設備上優化。
- 系統結構:從意圖到視圖再到權限和更多。
- 如何將緩慢的XML變的更人性化。
- 一步一步的建構Android應用程式。
- 有很多的物件都擁有超連結,要如何將開發環境建置成類似小型網路的架構。
- 從桌面應用程式,轉移到小型移動設備上,去思考發展。
- 去控制應用程式的生命週期。
- "如何做出更省電"。
- 線程故事:不要使用線程去改變使用者介面。
- 使用XMPP的經驗。
下載電子檔(download the episode directly)或是線上收聽(subscribe to the show (click here for iTunes one-click subscribe))。
2007年11月29日 星期四
Android官方部落格翻譯:Twisty的小迷宮(A Maze of Twisty Little Passages)
上個週末是美國的感恩節,按造傳統是和家人一起享用大餐和看美式足球的日子。
最近有許多人在Android上,掌握了機會,開發出吸引我們目光的APP。
下一個即將到來的是,Z-machine上,由Zork所開發的遊戲移植計畫。首先要感謝sussman和mariusm為了能夠在Android上順利執行,所付出的努力。移植到Google Play上的專案,被稱為"Twisty"。
這個測試在Google社群上有很熱烈的反應。雖然JUnit對於Android SDK不是那麼友善,不過還是有許多方法可以測試。Positron建立了Android instrumentation,期待未來Android能夠有自我測試的可能性。筆者phil.h.smith認為這是一個可行的計畫(pretty good introduction)。
IDE上的開發插件,通常是Android Google groups的另一個愛物。雖然目前只有NetBeans釋放出消息。然而idea-android專案早已準備好迎接IntelljJ IDEA的插件,這要感謝aefimov.box和intelliyole。
Dion Almaer所著作的picked up on a crossover GWT/Android project,同時也令人驚艷。Chronoscope是一個開源碼的GWT函式庫,該團體僅僅使用了八小時(8 hours of playing with Android),就完成了和Android端的接口。
當然,還有更多的Android專案如雨後春筍般的出現,尤其當Android成為搜尋引擎的關鍵字,對於才剛發佈Android SDK沒幾個星期的我們,感到非常高興。
發文者 Dick Wall, Developer Advocate at 7:49 AM
原文出處 A Maze of Twisty Little Passages
最近有許多人在Android上,掌握了機會,開發出吸引我們目光的APP。
下一個即將到來的是,Z-machine上,由Zork所開發的遊戲移植計畫。首先要感謝sussman和mariusm為了能夠在Android上順利執行,所付出的努力。移植到Google Play上的專案,被稱為"Twisty"。
這個測試在Google社群上有很熱烈的反應。雖然JUnit對於Android SDK不是那麼友善,不過還是有許多方法可以測試。Positron建立了Android instrumentation,期待未來Android能夠有自我測試的可能性。筆者phil.h.smith認為這是一個可行的計畫(pretty good introduction)。
IDE上的開發插件,通常是Android Google groups的另一個愛物。雖然目前只有NetBeans釋放出消息。然而idea-android專案早已準備好迎接IntelljJ IDEA的插件,這要感謝aefimov.box和intelliyole。
Dion Almaer所著作的picked up on a crossover GWT/Android project,同時也令人驚艷。Chronoscope是一個開源碼的GWT函式庫,該團體僅僅使用了八小時(8 hours of playing with Android),就完成了和Android端的接口。
當然,還有更多的Android專案如雨後春筍般的出現,尤其當Android成為搜尋引擎的關鍵字,對於才剛發佈Android SDK沒幾個星期的我們,感到非常高興。
發文者 Dick Wall, Developer Advocate at 7:49 AM
原文出處 A Maze of Twisty Little Passages
2007年11月20日 星期二
Android官方部落格翻譯:防微杜漸(A Stitch in Time)
背景:當我在開發第一個Android App的時候(雖然很小),那是一個串接Podcast播放的應用程式,我需要一個輕而易舉的方法,能夠讓我在使用者介面上,實作即時更新的時鐘。
問題:在一開始,我使用了java.util這個函式庫來更新時鐘,但是這個類別在Android上不是個好選擇。在這邊使用時鐘的例子來介紹,在應用程式開一個新線程。考慮到移動裝置應用程式有別於視窗應用程式,我們必須要找到更有效率的方法,來更新時鐘。
應用程式:關於應用程式移植這部份的故事,留待日後的部落格會再開文詳述。如果你對開發應用程式有相當的疑問和興趣,你可以在開發者網站閱讀之前的文章,裡面有關於Matisse(Java上用於開發GUI-圖形使用者介面的類別)的介紹。原本的應用程式是使用Java Swing的SE應用程式。在錄製Podcast的時候,扮演了迴圈計時碼表的角色。當你開始錄音時,碼表同時被啟動,當你按下FLUB按鈕,會紀錄下那時候的音軌。最後你可以儲存它,並且使用Audacity來編輯它。
參考文件:http://www.developer.com/java/ent/print.php/3589961
一開始的版本中,計時器的程式碼如下:
當我在使用Android SDK要移植應用程式的時候,發生了程式碼無法在Eclipse上編譯的窘況,原來Timer()這個類別無法被執行(幸好在錯誤訊息中找到原因),除此之外,String.format這個方法也無法使用,所以我必須盡快找到解決的辦法。
最後,計時器的功能,可以透過android.os.Handler這個類別,來設置監聽器。
我們希望程式能夠重複取得時間係數,直到我們告訴它停下來。為了做到這一點,必須把另一個宣告延遲的函式,放置到mUpdateTimeTask run()這個方法後面。要注意的是,Runnable是Handler實作的方法,所以我們改了一下mUpdateTimeTask去實作,新的時鐘更新方法如下:
if判斷式,是為了讓時間係數的分,在小於10的時候,會以10:06呈現,而不是10:6(希望外來String.format()這個方法能夠使用),在計時器取得時間係數的時候,會調用Handler本身,以每200毫秒來啟動下次的動作: (((minutes * 60) + seconds + 1) * 1000)。
現在我們需要一個按鈕,來讓計時器能夠停止。並且宣告按鈕的監聽器如下:
Handler是一個比Timer更好用的類別。Handler能夠妥善處理程式碼在主線程執行,避免額外再新開一個線程。要記得維持線程的順暢,避免搞壞使用者體驗。
以上就是一系列Android之旅的第一個開發提示。希望這能夠在你開發的路上,少走些冤枉路,節省一些時間,可以去開發你想要的程式(即使只是一個應用程式的小更新)。這一篇文章涵蓋了我許多移植應用程式的經驗,也許未來會增加更多的小提示,除此之外,還有更多的討論正在Android Developers Discussion Group進行著。
發文者 Dick Wall, Developer Advocate at 4:42 PM
原文出處 A Stitch in Time
問題:在一開始,我使用了java.util這個函式庫來更新時鐘,但是這個類別在Android上不是個好選擇。在這邊使用時鐘的例子來介紹,在應用程式開一個新線程。考慮到移動裝置應用程式有別於視窗應用程式,我們必須要找到更有效率的方法,來更新時鐘。
應用程式:關於應用程式移植這部份的故事,留待日後的部落格會再開文詳述。如果你對開發應用程式有相當的疑問和興趣,你可以在開發者網站閱讀之前的文章,裡面有關於Matisse(Java上用於開發GUI-圖形使用者介面的類別)的介紹。原本的應用程式是使用Java Swing的SE應用程式。在錄製Podcast的時候,扮演了迴圈計時碼表的角色。當你開始錄音時,碼表同時被啟動,當你按下FLUB按鈕,會紀錄下那時候的音軌。最後你可以儲存它,並且使用Audacity來編輯它。
參考文件:http://www.developer.com/java/ent/print.php/3589961
一開始的版本中,計時器的程式碼如下:
class UpdateTimeTask extends TimerTask { public void run() { long millis = System.currentTimeMillis() - startTime; int seconds = (int) (millis / 1000); int minutes = seconds / 60; seconds = seconds % 60; timeLabel.setText(String.format("%d:%02d", minutes, seconds)); } }並在場景上的監聽器來啟動Timer()的更新,詳見以下實例:
if(startTime == 0L) { startTime = evt.getWhen(); timer = new Timer(); timer.schedule(new UpdateTimeTask(), 100, 200); }要特別注意的是,第一個參數100,表示第一次時鐘執行的時候,是在100毫秒之後,第二個參數200,表示之後每隔200毫秒更新一次,直到程式終止。200毫秒感覺並不明顯,但是如果不這樣做的話,就會發生延遲了2秒,畫面卻還沒即時更新的奇怪現象。
當我在使用Android SDK要移植應用程式的時候,發生了程式碼無法在Eclipse上編譯的窘況,原來Timer()這個類別無法被執行(幸好在錯誤訊息中找到原因),除此之外,String.format這個方法也無法使用,所以我必須盡快找到解決的辦法。
最後,計時器的功能,可以透過android.os.Handler這個類別,來設置監聽器。
private Handler mHandler = new Handler(); ... OnClickListener mStartListener = new OnClickListener() { public void onClick(View v) { if (mStartTime == 0L) { mStartTime = System.currentTimeMillis(); mHandler.removeCallbacks(mUpdateTimeTask); mHandler.postDelayed(mUpdateTimeTask, 100); } } };首先,我們無法調用getWhen()這個方法,來對計時器來做設定。於是我們使用了System.currentTimeMills()這個方法,同時設定為Handler.postDelayed()的參數,但是無法重覆取得當下的時間係數。在這種情況下,我們宣告Handler在100毫秒之後,呼叫mUpdateTimeTask()這個方法,雖然解決了宣告計時器的問題,但是卻沒有解決重覆取得時間係數的問題。
我們希望程式能夠重複取得時間係數,直到我們告訴它停下來。為了做到這一點,必須把另一個宣告延遲的函式,放置到mUpdateTimeTask run()這個方法後面。要注意的是,Runnable是Handler實作的方法,所以我們改了一下mUpdateTimeTask去實作,新的時鐘更新方法如下:
private Runnable mUpdateTimeTask = new Runnable() { public void run() { final long start = mStartTime; long millis = SystemClock.uptimeMillis() - start; int seconds = (int) (millis / 1000); int minutes = seconds / 60; seconds = seconds % 60; if (seconds < 10) { mTimeLabel.setText("" + minutes + ":0" + seconds); } else { mTimeLabel.setText("" + minutes + ":" + seconds); } mHandler.postAtTime(this, start + (((minutes * 60) + seconds + 1) * 1000)); } };並且可以被定義為類別的成員變數。
if判斷式,是為了讓時間係數的分,在小於10的時候,會以10:06呈現,而不是10:6(希望外來String.format()這個方法能夠使用),在計時器取得時間係數的時候,會調用Handler本身,以每200毫秒來啟動下次的動作: (((minutes * 60) + seconds + 1) * 1000)。
現在我們需要一個按鈕,來讓計時器能夠停止。並且宣告按鈕的監聽器如下:
OnClickListener mStopListener = new OnClickListener() { public void onClick(View v) { mHandler.removeCallbacks(mUpdateTimeTask); } };為了確保按鈕不會發生二次點擊,當按鈕按下的時候,將會移除監聽。
Handler是一個比Timer更好用的類別。Handler能夠妥善處理程式碼在主線程執行,避免額外再新開一個線程。要記得維持線程的順暢,避免搞壞使用者體驗。
以上就是一系列Android之旅的第一個開發提示。希望這能夠在你開發的路上,少走些冤枉路,節省一些時間,可以去開發你想要的程式(即使只是一個應用程式的小更新)。這一篇文章涵蓋了我許多移植應用程式的經驗,也許未來會增加更多的小提示,除此之外,還有更多的討論正在Android Developers Discussion Group進行著。
發文者 Dick Wall, Developer Advocate at 4:42 PM
原文出處 A Stitch in Time
2007年11月16日 星期五
Android官方部落格翻譯:Android :第一週(Android: the first week)
哇嗚!一個禮拜過去了。從上週一開始,我們的討論版,已經被Android SDK的討論淹沒啦!我們很高興可以幫助到大家 ,如何設計新的APP 。
更新資訊:
更新資訊:
- 我們已經緊急發佈了新SDK,解決了一些問題。現在請你下載(download M3-RC22a)和閱讀相關文件(release notes),別忘了更新Eclipse的插件(update the ADT plugin) 。
- 一些你可能感興趣的文章:
- 以開發者角度淺談Google Android SDK(A developer's perspective on Google's Android SDK)
- 為何Google選擇了Apache來搭配Android(Why Google chose the Apache Software License [sic] over GPLv2 for Android)
- Google手機:內建Android為gPhone SDK(Google Calling: Inside Android, the gPhone SDK)
2007年11月13日 星期二
Android官方部落格翻譯:勇者!秀出程式碼吧!(Just show me the code)
OK!你已經下載了Android SDK,並準備好開發出下一個千萬下載APP了嗎?(或許過程中還能賺到不少錢。)
活動(Activities)?意圖(Intents)?內建容器(SimpleCursorAdapter)?嗯...我該如何開始呢?
這就因人而異了,有些人想要從頭到尾,仔細的看完每一篇技術文件,而有些人則是希望能看到示範的程式碼。
Android SDK提供了許多範例APP,這些範例APP都是免費的,讓你能夠更快掌握Android的開發。包括了有:
API示範(API Demos)
「廚房水槽(kitchen sink)」這隻APP,涵蓋了大部分的實用元件和Android的API。你可以看到活動(Activities)、服務(Services)、通知(Notifications)和佈局(Layouts),在應用程式中不同的實現方法和圖文顯示。這隻APP提供了完整的素材,可以當作「我該如何開始?」的最佳範例。
登陸月球(Lunar Lander)
這是一個展示如何加載、繪製圖形和動畫技術的遊戲。取得使用者輸入動作,儲存或暫停遊戲進度。然而,Android開發的樂趣,並非只有這樣而已!
筆記本(Note Pad)
你將學習到,如何使用意圖(Intents)開啟一個新畫面,使用內建資料庫之類的。這個範例介紹了應用程式流程和生命週期管理,這些在開發進階應用程式是很重要的。
這些應用程式的程式碼和相關資源,可以在SDK資料夾(底下的/samples),或是在網路上找到:
http://code.google.com/android/samples/
以下是幾個小建議:
在你練習這些教學範例的時候,如果遇到問題,歡迎將你的問題在討論版(Android Developers Discussion Group.)提出。
發文者 Quang Nguyen, Developer Advocate at 9:17 AM
原文出處 Just show me the code
活動(Activities)?意圖(Intents)?內建容器(SimpleCursorAdapter)?嗯...我該如何開始呢?
這就因人而異了,有些人想要從頭到尾,仔細的看完每一篇技術文件,而有些人則是希望能看到示範的程式碼。
Android SDK提供了許多範例APP,這些範例APP都是免費的,讓你能夠更快掌握Android的開發。包括了有:
API示範(API Demos)
「廚房水槽(kitchen sink)」這隻APP,涵蓋了大部分的實用元件和Android的API。你可以看到活動(Activities)、服務(Services)、通知(Notifications)和佈局(Layouts),在應用程式中不同的實現方法和圖文顯示。這隻APP提供了完整的素材,可以當作「我該如何開始?」的最佳範例。
登陸月球(Lunar Lander)
這是一個展示如何加載、繪製圖形和動畫技術的遊戲。取得使用者輸入動作,儲存或暫停遊戲進度。然而,Android開發的樂趣,並非只有這樣而已!
筆記本(Note Pad)
你將學習到,如何使用意圖(Intents)開啟一個新畫面,使用內建資料庫之類的。這個範例介紹了應用程式流程和生命週期管理,這些在開發進階應用程式是很重要的。
這些應用程式的程式碼和相關資源,可以在SDK資料夾(底下的/samples),或是在網路上找到:
http://code.google.com/android/samples/
以下是幾個小建議:
- 確實閱讀應用程式當中的配置檔(AndroidManifest.xml),這會幫助你更了解Android App的整體架構。
- 嘗試自己去修改程式碼,來熟悉建立和測試專案。
- 依造自己開發專案上的需求,使用或留下有用到的片段程式碼。(避免砍掉重練)
在你練習這些教學範例的時候,如果遇到問題,歡迎將你的問題在討論版(Android Developers Discussion Group.)提出。
發文者 Quang Nguyen, Developer Advocate at 9:17 AM
原文出處 Just show me the code
2007年11月12日 星期一
Android官方部落格翻譯:這就是你要找的Android(This is the droid you're looking for)
延續上週在OHA(Open Handset Alliance 開放手機聯盟 )的發表( announcement ),今天我們很高興能夠釋出Android SDK 提早讓你感受。我們期待能夠在討論版(discussion group)上,獲得廣大開發者的建議。同時我們也提供了開發者文件( developer documentation)和這個官方部落格,來幫助你上手。
你可能想要馬上了解哪些是有用的。Android SDK的預覽功能,允許你在開發Android APP的時候,使用模擬器或是其他工具,來執行、測試、配置或除錯你的應用程式。需要注意的是:模擬器的使用者介面,包含外觀和體驗,版本是一直持續在開發中的。
我們釋放出Android SDK的其中一個目的,是期待創造出更多Android平台的開發者,也希望在第一隻Android概念手機問世之前,盡快得到四方的建議,好讓Android能夠更完善。我們計畫會頻繁的更新和發佈Android SDK,這意味著我們會常添加修改API和UX。「追蹤(subscribe)本部落格,來獲取最新消息。」
我們相當期待能夠看到,數以萬計的開發者,能夠建立一個開放式手機平台。事實上,你甚至可以讓你的App作品,參加Android開發者挑戰賽(Android Developer Challenge),這場比賽是由Google提供一百萬美金,獎勵開發者在Android平台上,開發更多好作品。
發文者 Emily Wood at 8:17 AM
原文出處 This is the droid you're looking for
訂閱:
文章 (Atom)