七月 27, 2010
» 投影展示Android手機畫面


去年寫過一篇Demo Android Phone through your PC/MAC,介紹「DroidEx.jar」這個可以透過電腦螢幕展示Android手機畫面的工具。

這次要介紹的是 Android Screen Monitor 這個同類型的工具。

Android Screen Monitor 跨平台,從網頁下載之後,先將手機連上電腦,接著只要輸入

java - jar asm.jar

即可於螢幕顯示手機畫面,相當方便喔。

五月 21, 2010
» 如何讓應用程式直接安裝到SD卡執行(2.2)

Android 2.2 中新增了應用程式直接安裝到SD卡執行 (不少人稱這個功能作 App2SD),
要使用這個功能只要在目前程式中做幾個設定:

1. 專案的 Project Build Target 版本設定為 2.2 (API 8)
2. 修改 AndroidManifest 清單

設定 Project Build Target 版本

在 Eclipse 專案列表中按右鍵,選取 properties 選項,會彈出設定視窗。
在上面選擇左側的 Android 標籤,在右側 Build 欄位勾選「Android 2.2」選項(沒有這選項的請參考 管理SDK 來升級SDK),如此一來編譯時才能認得我們接下來在 AndroidManifest 清單中所做的設定。

修改 AndroidManifest 清單

在 manifest 標籤中加入一個「android:installLocation」屬性,實際程式碼如下

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
package="com.demo.org"
android:versionName="1.0" android:versionCode="1"
android:installLocation="preferExternal"
>
....

說明

android:installLocation="preferExternal"

清單中加入以上宣告後,編譯好的程式仍然可以適用於較低版本的機器,只有在程式安裝到 Android 2.2 版之後的系統上,系統才會自動將這個程式安裝到 SD 卡中。

安裝到SD卡中時程式會預作一次加密,讓只有安裝本程式的機器能存取這個程式,避免了程式可能會輕易被盜拷的疑慮。

沒有用到 Service、桌面小工具(Widget)、或動態桌布(Live Wallpaper)功能的程式比較適合儲存到SD卡,例如遊戲或 BMI 等小程式。

因為當機器使用 USB 和電腦連線,將SD卡掛載成磁碟機時,這些儲存在SD卡中執行的程式將會被中斷。

其他提示請參考 Android 官方文件

» Android 2.2,完全版的Android就應該長這樣



現在在Google I/O 2010 會場看現場發表會。Froyo 真的是非常高完成度的版本,除了機器OS本身之外,還支援了許多對開發者、對使用者都有利的特性:

開發者:

  • 新版開發工具支援 Library Project,意思是同時開發試用版/正式版時,終於可以共用多數程式碼和資源檔,而不用完全開兩個專案出來
  • 支援 Data Backup API,表示任何應用程式都可以使用 Android Cloud 將程式中的資料記錄到雲端上,換到任何其他台手機上都可以備份回來。
  • 允許遠端控制機器
  • 多種模式的 Mobile AdSense
  • 應用程式可以直接安裝到SD卡,得以在Android上實現大型遊戲等應用
  • Google TV 上也能裝 Android 應用程式。這表示什麼?表示開發Android平台遊戲就能打進電視遊戲市場!
使用者
  • 應用程式/網頁都有2~3倍以上的執行速度
  • 應用程式能從SD卡中執行
  • 在網頁版Market上點選安裝,在機器上即能自動下載
  • 語音辨識功能、桌面搜尋功能更強大
  • 有新版本應用程式可以自動從 Market 更新
  • 搭載Froyo的設備能直接變成行動 AP (tethering)
開發者們又很有事情可以做了 :)

四月 14, 2010
» 自動偵測螢幕大小和解析度

在 Android 機器上,螢幕的解析度可以用「螢幕大小」和「螢幕點距」兩個參數來表示。

一般的方法

在 Android 1.6 版以後,可以使用 config.screenLayout 語句來判斷螢幕大小

Configuration config = getResources().getConfiguration();
if((config.screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL){
}

UPDATE 2010/4/14: sam 說 「config = new Configuration()」只會回傳預設的Configuration, 而非當前的Configuration. 找了一下最好是使用 getResources().getConfiguration()

支援的參數與代碼如下
  • Configuration.SCREENLAYOUT_SIZE_UNDEFINED 0
  • Configuration.SCREENLAYOUT_SIZE_SMALL 1
  • Configuration.SCREENLAYOUT_SIZE_NORMAL 2
  • Configuration.SCREENLAYOUT_SIZE_LARGE 3

要檢查點距,可以使用 DisplayMetrics 語句來判斷螢幕點距

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm);
if((dm.densityDpi == dm.DENSITY_HIGH)){
}
支援的參數與代碼如下

  • DENSITY_HIGH 240 (dpi)
  • DENSITY_MEDIUM 160
  • DENSITY_LOW 120
  • DENSITY_DEFAULT 160

相容 1.5 以下機型

根據Android 版本使用圖表,2010年1月時 Android 1.5 市佔率還是接近 1/3,但是這1/3的機器上並無法使用上面的API。



在 1.5 版上,其實仍然可以用 density 語句來判斷螢幕點距比率

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm);
if((dm.density >= 1.5)){
}

density 的值 1 代表一般點距,1.5 代表高點距,0.75代表低點距。要偵測市面上所有的機器是否是高解析度機型,只要運用以上方法,就可以自動偵測出螢幕大小和點距囉。

三月 2, 2010
» Android 免費+廣告營利模式

一篇經驗分享文章,分享 Android 上使用 AdMob 廣告營利的經驗與注意事項
2010世界杯,我的Android之旅 蠻不錯的

另一篇移动应用排名与开发者的机会亦有可觀

二月 23, 2010
» Development on android

PB124730
Annecy.France

看了點文件,想說就來寫寫東西吧,從最簡單的開始。

之前在國外時,為了學法文,幫onlinedic寫了個Vocabulary Review的小程式在Windows Mobile上。讓自己可以用當時帶出去的dopod818加減看一下查過的單字。現在,當時的code已經都不見了,所以想說在android上也寫一個好了。反正onlinedic的export機制都還是okay的。

在寫程式時,也可以順便練習到android上的一些基本觀念,比方說:如何透過intent來叫起另一個activity;如果在叫起別的activity時,帶想要的參數給它;透過xml的UI建置方式,畫面橫轉正轉的處理;UI元件的動作指派;目錄結構的讀取,文字檔的讀取;簡單的webview應用;activity暫存狀態的記錄;功能權限的開啟;androidManifest.xml的基本設定;eclipse開發環境的熟悉等。

真的寫下去了,明明是個很簡單的程式,但也弄了一天多才寫好,花了許多時間在小細節上。如果不把除錯、追臭蟲方式弄熟,接下來的日子應該會很痛苦吧。

= = =
如果有空的話,乾脆一不做二不休,把onlinedict也搬到android,這樣子就不用每次都要裝一堆字典了。在網路上找到open source,可以讀取stardict字典檔的程式,有空再研究吧。先記下link:
http://code.google.com/p/toolkits/wiki/YAStarDict

另外,沒想到有人替eblib包了個python wrapper!!
當初在onlinedict裡亂寫的鄨腳command line程式,應該可以用這個wrapper把它換掉吧,省下暫存文字檔輸入輸出的廢工。
也是…改天有空再試吧。
Link: http://code.google.com/p/pyeb/

二月 21, 2010
» TAT桌面

每天使用的桌面需不需要這麼絢麗哩?

一月 11, 2010
» 甜點師父


蛋糕賣完賣焦糖布丁,書一年改了三版,真是太瘋狂啦!

當初寫作這本書的目標,就是成為學習 Android 基礎的第一本入門書,我想我有做到最好。對我來說,每個讀者當下拿到書可能只會看一遍。如果看到的內容與新版 Android 有所差距,雖然可以很容易歸因於 Android 改版太快,但我覺得作者也應該負上責任。

Android 自 1.6 版後,引入了新的 SDK 工具架構,讓整個版本升級更容易。同時因為升級容易,Android 的改版也變得更快速(現在幾乎是一個月出一個新版本),這讓寫作入門書的挑戰變得更大。這次針對 Android 1.6、2.0 之後所引進開發工具新架構的大改版,讓新讀者入門時更順暢、也讓舊讀者能順利熟悉新版 Android 環境,並有足夠知識去使用各種 2.x 版的後續版本更新。

這個版本加入 SDK 開發工具介紹,說明 Android 各版本與開發工具之間的關係;解釋了多種解析度機種的區別與開發/測試方式。同時因為書籍範例的完成度很高了,也將各章的範例操作完全獨立開來,每章都附有可直接對照進度的程式碼,更易於新手入門時對照學習。

期望在新的一年裡,可以騰出手來,好好研究一些進階的技術,繼續與大家分享。

一月 6, 2010
» Nexus One 操作影片



看起來確實很順暢

還有支援 Flash 10 的影片


十一月 20, 2009
» Android 集市大亂鬥

是什麼 Market 並不太重要。使用者在哪裡,開發者就在哪裡。

談到 Android Market,非北美/西歐的開發者都有很多意見,主要焦點都集中在能不能放付費軟體上。這點對各 Android 集市皆然。前陣子開始整理了一個已公開的各家 Market 一覽表。開發者把應用軟體寫出來了,該選擇放在哪些 Market 上頭呢?

寫應用軟體的目的

開發者開發免費應用程式無非是為了以下幾種目的:

  1. 自己要使用
  2. 增加經驗值(練功)
  3. 提高名聲/打知名度
  4. 靠廣告賺錢
  5. 靠付費版賺錢

在此暫時不分析付費軟體的部份,因為目前還沒有任何一家提供。

這篇只就免費軟體來談。免費軟體該發佈到哪些 Market 上頭呢?


殘酷的答案

老實說寫了免費軟體,經過思考之後,我只會丟到 Android Market。

理由如下:

以前面寫應用軟體的目的來分析:

  • 自己要使用
目前手邊還沒有不預裝 Android Market 的機子。對其他 Market 的需求並不大。
  • 增加經驗值(練功)
放到哪個 Market 上一樣都是練功。Android Market 背後有 G 社備援,提供網頁管理介面、使用者評論等等,雖然不完美,但至少可以和使用者取得互動。目前大部分其他的 Market 並無提供同級的網頁管理介面。有的 Market 還得自己四處申請、填寫一堆文件、截圖,各 Market 審核後還有可能會退你件,弄得跟到奴隸銀行求職一樣。寫免費軟體的開發者難道是為了得到這樣的經驗值?
  • 提高名聲/打知名度

發佈到各家 Market 的下載量,可能還沒有 Android Market 上的 1/100(這是經過美化 n 倍後的數據,請原諒我就是這麼直)

  • 靠廣告賺錢
參考上一點,發到各論壇去,下載數可能也會比在一些 Market 上高。要勤勞到處貼我建議去貼論壇或 PTT。

以上四點都是 False Impact 的,各 Market 集市的擁有者們看了可能會很沮喪。但其實你們只剩下一個吸引開發者將程式放到自己 Market 的方式:
  • 靠付費版賺錢
各家集市算盤打的精,想拿免費軟體開路,吸引使用者造訪的司馬昭之心再明顯不過。除了電信商推的 Market 之外,其他的 Market 要取得開發者/開發商青睞,自動奉上免費軟體更難。開發者不可能永遠靠佛心來支撐,沒飯吃還是會餓死的。國內哪個 Market 先能收費,對是否能帶動免費軟體進來,衝高軟體數量還是很關鍵的。

至於國內最後哪些個 Market 會繼續存活,其實只要比較兩件事:

1. 人潮
2. 哪個 Market 能放付費軟體

我相信沒有回報,只有付出的關係是無法長久的。

只要誰先推出拆帳合理的付費機制,相信開發者還是會趨之若騖。

眾家 Market:加油,好嗎?

十一月 18, 2009
» AttachEmail: 從SD卡中加檔案到Email附件

(不知道為什麼系統沒直接提供這功能)

昨晚上花了幾個鐘頭做了一版出來。功能非常單一:主要就是從檔案列表裡選擇任一檔案,而所有檔案左側都會有一個迴紋針符號,
只要點選項目,就可以把檔案當做 Email 附件,這樣以後SD卡就不用拔來拔去了。

大家有需要可以到 Android Market 搜尋 AttachEmail 下載。

» 支援不同解析度的 Android Market

本來市面上 Android 相關機種一律都是 480*320 解析度,
Android 1.6 發佈後,也正式發售支援了其他使用不同解析度的機種,例如 QVGA(320*240) 或 WVGA(800*480)。

當然在不同的解析度下,畫面顯示上多少有些不同。
為了避免使用者裝到不適合解析度的程式而引發使用上的混亂,Android 1.6 在 AndroidManifest 清單中引入了「supports-screens」宣告。

一般來說要支援各種解析度,可以在編譯前先將編譯 Target 選為 1.6(專案名>右鍵>Properties>Android>Android 1.6),並在 AndroidManifest 清單中加入如下設定:


[supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="false"/]


「normalScreens」代表的是一般解析度(如 G1, Hero),「smallScreens」代表的是較低解析度(如 Tatoo)。

現在將程式發佈到 Android Market 時若沒做以上設定,你寫的程式將不會顯示在 QVGA/WVGA 機器的 Market 中。

那麼其他使用奇怪解析度的設備哩?(例如最近發表的某台 WQVGA 機器...)反正上面也沒有 Android Market, 就留給打算支援這些設備的開發者多傷一份腦筋啦.


PS: 將 Target 設為 1.6 跟在 AndroidManifest 清單中設定 minSdkVersion 最低相容版本並不衝突,只要 minSdkVersion 維持不變,低於 1.6 版的機器還是可以使用你的程式。


update: 事實上「smallScreens」代表的是小螢幕,「normalScreens」是一般螢幕,「largeScreens」當然是大螢幕。一般三者的分界點大概在3吋跟4吋。所以 Tattoo (2.8") 被歸在「smallScreens」範疇。

十一月 7, 2009
» 簡體版出版

More about Google Android开发入门指南

終於簡體版也出版了。

對應的是繁體的第二版(Android 1.5)。定價 45 RMB,換算回來還不到 200 NT,真是便宜呀。

希望大陸的朋友們也會喜歡囉 :)

十月 28, 2009
» Eclair (Android 2.0) 發佈



想不到才過了一個月,Android 2.0 這麼快就出來了。
對開發者來說,主要的變化是開放了原本的一些 internal API,包含 Bluetooth、多點(至多3點)觸控(MotionEvent)、AccountManager、Sync Adapter、Dock(底座)、並強化相機 API、瀏覽器支援 HTML5、支援更多種解析度機器...等。

除了大家期待已久的藍芽與多點觸控,開放 AccountManager、Sync Adapter、Dock這些 API 表示 Android 系統已經準備好讓開發者們能創造與 Google 以外的網路服務、與其他設備更加緊密結合的應用程式。真是很期待開發者們能怎麼運用這個強大的系統 :)

九月 30, 2009
» Android Development Notes

R8075885.JPG
Taipei.Taiwan

台北的稻田…

****

安裝eclipse ADT時遇上找不到plugin的問題。
最後改用手動下載ADT,自己安裝的方式。
http://developer.android.com/intl/ja/sdk/1.6_r1/installing.html#Troubleshooting

Vimplugin for Eclipse
http://vimplugin.org/

九月 22, 2009
» OCR 應用



WordSnap OCR



Mezzofanti

九月 16, 2009
» Donut (Android 1.6) 發佈

Donut (Android 1.6) 發佈了,補完了 Android 1.x 應該有的功能,支援更多的機器。



隨著 Eclipse 3.5、Android 1.6 跟 ADT 0.9.3 推出,到底值不值得再次改版我寫的入門書呢?

如我在第二版序中所言的,Android 改版相當快,所有進階的內容很有可能變動,唯有基本入門所需的知識並沒有改變太多
因此沒有意外的話,應該會等到 Android 2.0 之後才考慮再改版。

1.6 新版本相關的新內容將先加在電子書版中。

九月 6, 2009
» 樣板表示法

在做講解投影片時自然而然寫出

import package

public class ${Name} extends Activity{
...
public void onCreate(...){
...
setContentView(${layout})
}
}


這樣的 python Template 表示法, 抽象化有時確實有助於理解。

九月 4, 2009
» Market

新版的 Market 介面改了不少, 看起來是有往好的方向走

九月 3, 2009
» 麵包師父



看到第二版書的封面,就知這是筆者轉職成為麵包師父後的第一作(誤)

「Google!Android 手機應用程式設計入門 2ed」 這本書主要是為了因為想開發 Android 而學 Java 的人寫的。
最適合的讀者是有其他語言開發經驗,但對 Java 還不太熟悉的讀者。

本書第二版上市時間跟前一版只差了 5 個月,主要是因應 Android 1.5 版釋出,
加上 Android 開發工具 ADT 大改版到 0.9 而大量改寫,
修正許多前一版的 Bug 跟範例程式碼,把整個學習流程弄的更順暢,
並加入新章節、新圖例(超過 60 張)、實用小技巧。
(當然出版社肯讓我這麼短時間就改版,也是因為賣得還算不錯啦)

買過本書第一版的您不見得需要買第二版,但是本書第二版當然更適合拿來介紹給其他想入門 Android 的朋友。

用杯子蛋糕(CupCake)當封面是我的惡趣味,以配合 Android 目前版本的代號,希望能在賞玩本書時帶來樂趣。


博客來連結

A Feedjack powered Planet
A Django site.