2011年4月23日 星期六

[Android] 常用免費離線軟體

最近對 Android 比較有愛,下班還會抽空研究研究,自從家人有了 Android 手機後,也開始會幫忙裝些有的沒有的。由於一切以經濟、便利為最重要的考量,所以目前不打算花錢買 app 並且避開需要網路的 app 啦(或是只在 wifi 環境下使用)。


記得幾天前也跟同事閒聊,詢問關於智慧手機對他而言的便利性,同事很簡潔地回答,只需 "打電話" 跟 "網路" 就好了 XD 因為有了網路就可以上網查東西啦,倒不是甚麼 killer 級的 app 讓他愛不釋手耶。這些使用習慣剛好跟我相反 XD 大概我太龜毛了,就是喜歡考慮沒網路的環境 Orz 我本身使用智慧型手機也沒在用 3G 網路啦,算起來只有一次去台北出差時,跟同事借過一張吃到飽的 sim 卡罷了,當時的想法是耗電快、網路速度慢 :p 總之,來筆記一下自認為的 killer 級的生活類 app


環境敘述:


一支 Android 2.1 手機,搭配 16GB microSD 卡,現在一張 16 GB 大概不用 800 元。


生活類:



RMaps - 離線地圖


出門在外,如果有張地圖存放在手機內,豈不是很方便嗎?假使手機又有 GPS Reader 的話,又可以幫你定位在地圖上,馬上得知自己的周遭位置,豈不爽乎?哈,這些功能是不需要網路就能達成的,這正是離線地圖。唯一的缺點是使用 GPS 定位也是挺耗電的 XD 請酌量使用。


用法:


在 Android Market 上搜尋 RMaps 就可以找到,安裝完後,點選 [Rmaps] -> [設定] -> [使用者定義地圖] 後,當你用 USB 連結手機時,在手機記憶卡中可以看到 rmaps 目錄,其中有子目錄 maps ,只要將你做好的離線地圖擺在 /sdcard/rmaps/maps 中,接著從 [Rmaps] -> [設定] -> [使用者定義地圖] 裡啟用剛剛放入的離線地圖,接著換到 [Rmaps] -> [地圖] 中,挑選剛剛放入的離線地圖,此時程式需要初始化相關設定,等一會兒後都弄好後,你就擁有離線地圖的功能啦!將會依照你所設定的地圖資料,呈現在手機上喔!


至於製作離線地圖的方式,可以 Google 看看 XD 可以透過 Mobile Atlas Creator 自行製作或許還可以找到別人做好的離線地圖喔,全台範圍的離線地圖且精細度到 0-17 的圖資,大小約 1.8GB。



ColorDict 辭典 - 離線字典


除非是英文超強者,不然生活上很容易就會碰到不懂的單子,這時候就需要字典的幫忙!出門在外,看不懂就虧大啦!


用法:


在 Android Market 上搜尋 ColorDict 安裝後,除了本身程式可以透過[下載詞典資料]自動到 Android Market 下載官網內建的辭典外,還可以使用 StarDict 星際譯王 的辭典檔!雖然 ColorDict 官網的詞典有英中類辭典(English Chinese Dictionary),下載完執行他就會幫你把資料移到手機記憶卡的特定位置 /sdcard/dictdata 中,但是簡體的!如果看的慣就使用,看不慣就可以改去下載 StarDict 星際譯王 的,裡頭有繁體中文,只是,現況竟然找不到下載位置!慶幸的,從 Android @ PTT - [軟體] StarDict 字典檔下載 (for ColorDict...etc) 中,可以得知有善心人性幫忙 mirror 一份啦,所以我就下載三份:


21 世紀英漢漢英雙向詞典,解壓縮約 26.6 MB (stardict-21shijishuangxiangcidian-big5-2.4.2.zip)
21 世紀雙語科技詞典,解壓縮約 40.1 MB (stardict-21shijishuangyukejicidian-big5-2.4.2.zip)
牛津現代英漢雙解辭典,解壓縮約 14.8 MB (stardict-oxford-big5-2.4.2.zip)


將解壓縮的成果 dict_name.dict 、 dict_name.idx 和 dict_name (dict_name只是個例子),皆擺進 /sdcard/dictdata 中即可,如此一來重新開啟 ColorDict 時,程式就會自動幫你建立相關資料,以後就可以從這些詞典,進行查詢啦!就不用再透過網路囉。


除此之外,也可以在 [ColorDict] -> [詞典] 裡,設定查詢結果的優先順序,目前我是把 "21 世紀英漢漢英雙向詞典" 排第一啦,因為他的排版不錯。



Dropbox 網路硬碟服務 - 離線文件


網路硬碟並不陌生,但如果有一套軟體不侷限單檔大小,又支援各類平台 (Windows、Linux、iPhone、Android),豈不方便 :D 這就是 Dropbox 啦!可以註冊免費的會員,享用 2GB 空間,並且透過邀請更多朋友後,可以提升容量到 1x GB 喔。唯一缺點是上傳檔案到 Dropbox 有點慢 :p


用法:


在 Android Market 上搜尋 Dropbox 就可安裝使用,假設你有一些文件存在 Dropbox 空間,那麼在手機端使用只需點選、閱讀後,手機上就留有一份啦,所以沒有網路的狀態也可以使用喔!例如把一些照片、PDF文件等(若手機預設不支援 PDF 的話,可以在 Market 上搜尋 PDF ,安裝 adobe reader 啦),也很方便


然而這並非 Dropbox 的主要服務,其本身原先是用來做各平台同步功能,例如你有 A, B 兩台電腦,裡面裝了 Dropbox 並使用相同帳號,那就可以同步指定的目錄,除了將資料也備份到 Dropbox Server 外,也能確保 A 跟 B 中,指定目錄裡的資料是同步的。當然,也支援多台電腦、裝置,不侷限 2 台喔!



Skype 網路電話


雖然 MSN 比較流行,也支援網路電話的功能,但是,Skype 可以支援多人聊天,無論是語音還是文字甚至傳檔案喔!(Skype語音服務有人數限制),除此之外還有加密功能!但這不是使用他最大主因,真真重要的,如果周遭有免費的無線網路可以使用時,那就可以用 Skype 講網路電話!如果你的裝置有 Webcam 或前置 Camera 的話,網路夠順時,還可以視訊電話呢。除此之外,如果家中有 2 台 PC 、一台可跑 Skype 的智慧手機,三處用同樣帳號持續登入,當有人播打網路電話找你時,三處皆會響,你可以決定使用哪個裝置接電話,豈不是咱門傳統電話,讓多層樓都可以接電話啊 :D 以前曾經想要花大把鈔票買 Skype 電話(僅需無線網路就好,剩下使用就像一般電話),講國際電話超省錢,現在有了智慧型手機就可以安裝 Skype 軟體達到一樣的目的囉!


用法:


除了在 Android Market 上用 skype 關鍵字找到安裝外,那還需要一組帳號,可以輕鬆註冊免費申請喔,其他的就跟在 PC 端使用上沒啥差別。



bbs reader


PTT 上頭有豐富的台灣類資料,所以,有時在 wifi 環境下,透過手機能夠查詢到也是很不錯的!這時就可以使用 bbs reader 啦!


用法:


在 Android Market 上使用 bbs reader 下載並安裝,剩下來就是挑選 ptt 還 ptt2 就可以使用了!如果對 PTT 常用的,應該動作都很直覺啦。最重要的是連線部分採用 SSH 加密連線唷!超讚的啦


其他類:



注音倉頡輸入法


大部分台灣買的手機,該名牌廠預設都已經有好用的中文輸入法,但使用 Nexus One/S 系列的手機,預設可能會沒有中文輸入法,這時候就需要找一套中文輸入法啦。然而,一套輸入法是有許多資安問題的!常玩線上遊戲的,對於鍵盤側錄應該不陌生,一不小心就因為電腦中了木馬,鍵盤上打出的任何一字都被記錄下來,進而被盜帳號。因此,在 Android 這個開放空間上,輸入法的安裝也是很危險的(例如常用服務的帳密、信用卡卡號等),所以,在此挑選 Open Source 的軟體 android-traditional-chinese-ime(該軟體留言有說是台灣 Google 作的,細節我不清楚,但可以看到開發者的 Email 是 android-tc-ime@gmail.com)


用法:


在 Android Market 上搜尋 chinese input (一開始不能打中文),如此一來就能安裝啦,之後再到 [設定]-> [語言與鍵盤] 中啟用輸入法。更多圖示資訊可以到 android-traditional-chinese-ime 觀看,有豐富的使用教學



Adobe® Reader®


有些名牌廠的手機預設就可以看 PDF 文件,如果不行的話,就安裝一下 Adobe Reader 吧!


用法:


在 Android Market 上搜尋 pdf 就可以看到並安裝,以後從瀏覽器、 Dropbox 或其他軟體上點選 pdf 文件就可以觀看了



Flash Player 10.2


如果你的手機夠新(Android 2.2以上),硬體夠好的話,想要瀏覽 Flash 網頁,那就安裝 Flash Player 吧!目前看留言有許多抱怨文 XD 我猜大概是支援還不完全,以及跑 Flash 真的很耗資源,硬體不夠好時,使用體驗應該會滿糟的,最差的情況還會影響其他軟體的使用,希望未來能夠越來越好。(很多人安裝大概是想玩 Facebook 遊戲吧?!)


用法:


在 Android Market 上搜尋 flash 就可以看到並安裝,以後從瀏覽器或其他軟體上就可以觀看 Flash 內容


遊戲類:


大部分的遊戲,要嘛付費要嘛廣告,所以,面對廣告的部分,就把無線網路關掉就沒差啦 XD 完全符合家人的使用!唯一要留意的是手機硬體規格是否可以跑的動 :p 目前我覺得 Angry Birds 需求還 ok 囉



Angry Birds



Angry Birds Seasons



Angry Birds Rio



Baseball Superstars® Free


黑手類:



SSHDroid


這是黑手常需要用的工具 XD 可以用 SSH 登入到自己的手機,查看或惡搞東西專用。



Superuser


很神秘的軟體


最後,還滿常聽到別人抱怨智慧型手機耗電快,主因大概是使用無線網路或是打太多遊戲吧 cc 把手機無線網路、藍芽、定位等相關東西關掉後,其實還滿省電的,再加上智慧手機的電池量也都不低,所以不用耗電相關的程式,也可以 1~2 天才充電。


2011年4月19日 星期二

Android 開發教學筆記 - 開發上碰到的 bug 筆記

今天同事跑來問我一些問題,我看到他的 code 馬上就猜出問題在哪 XD 明明同樣的 code 在其他範例可以跑,但此刻就是跑起來會看到 exception,是誰都會很火大吧 XD


解決方式?其實沒有正解 XD


狀況一:


現象:


public void onCreate(Bundle savedInstanceState) {
    ...
    Button testBtn = (Button) findViewById( R.id.testBtn );
    testBtn.setOnClickListener(this);

    ...
}


並且 layout/main.xml 中已經補好 Button 並且 id 為 testBtn 了,但很奇怪的跑上述程式會當掉,直到把 testBtn.setOnClickListener(this); 移除才 ok


解法:


去變動一下 layout ,例如在加個 textview 後再存檔,或許可以解決 XD


我之前為了這種問題,程式碼都改寫成:


    Button testBtn = (Button) findViewById( R.id.testBtn );
    if( testBtn )
        testBtn.setOnClickListener(this);


但這只是避免 exception 罷了 :P 目前正解還不清處,或許真的只要重開 Eclipse 就能解決吧


狀況二:


現象:


使用 Worker thread 去做運算,並且完工後去更新 UI 部分,結果就是不正常,(有時)無法更新 UI


解法:


上過課後,我才明瞭這個問題!因為 Android UI is not thread-safe ,所以更新 UI 請統一交給 main thread 處理。這也是我在 Android 開發教學筆記 - 使用 Regular Expression、Network Connection 和 Thread 中曾碰到的問題,那時也只是誤打誤撞把更新 UI 的動作交還給 Handler 來解決。


嗯,目前太少開發,筆記僅有上述兩點 Orz


經過這次聽別人的上課,我覺得收穫還不少,雖然自己去找資料可以完成一些功能面的工作,但系統底層還是要多多了解,這通常會受限於時間關係而無法進行,這時候聽別人上課可以有所吸收啊。


Android 開發教學筆記 - 使用 DDMS 和 traceview 筆記

DDMS 是 Android 開發中一個極為重要的 debug 工具,可以拿來查看模擬器上頭運行的 process、file system (sdcard) 等,不過我都沒在用 :P 每次開發碰到問題時,就想辦法透過 logcat 印出來看罷了,又再一次不善加利用環境。


這次上了課,了解了 DDMS 的強大,透過 android.os.Debug 可以查看某個 function 的運行時間,搭配 traceview 可以有圖形化介面觀看,除此之外還可以查看記憶體使用量等,十分方便。


建立一個 Project 後,除了模擬器要加 SDCard 空間外,別忘了記得打開 projects 寫入 SDCard 的權限,因為產生的報表會儲存在 SDCard:


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>


接著對想要監控的函數使用 Debug.startMethodTracing( "report" ) 和 Debug.stopMethodTracing() 夾擊起來,此例以 setContentView(R.layout.main); 為例:



package com.test;

import android.app.Activity;
import android.os.Bundle;
import android.os.Debug;

public class TEST extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Debug.startMethodTracing("report");
        setContentView(R.layout.main);
        Debug.stopMethodTracing();
    }
}


當程式跑起來後,可以用 Eclipse 切換到 DDMS ,先在左上角 device 視窗挑選 process (此例 package 為 com.test),查看 File Explorer 的部份,應該在 sdcard 區會找到 report 字樣的文件檔,此時可以透過 adb 把它取出來,或是透過 DDMS 右上角匯出(pull a file from the device):


$ /path/android-sdk/platform-tools/adb pull /sdcard/report.trace /tmp


ddms


接著用 traceview 查看:


$ path/android-sdk/tools/traceview /tmp/report.trace


traceview


如此就可以查看指定函數所耗費的時間,並且可以使用滑鼠去圈選上方顏色部分,可以拉大圈選範圍以方便觀看喔。


最後補充一點,此處使用的 Debug.startMethodTracing( "report" ) 和 Debug.stopMethodTracing() 僅適用於純 Java 這層的部份,例如有些是 call native c 的部份,則不適用,因此監控花費時間的部份,使用上需留意。另外,查看記憶體使用量是用 Debug.startAllocCounting() 和 Debug.stopAllocCounting() ,或是直接用 DDMS 的 Allocation Tracker 來使用囉。


2011年4月18日 星期一

Android 2.3 Compatibility Definition Document

之前選修了一門 Android 課程,講師在課堂上談論到關於取得 Android Source Code 的事,分享了這個東西:Android 2.3 Compatibility Definition - http://source.android.com/compatibility/2.3/android-2.3.3-cdd.pdf


看到 Android 2.3.3 規範硬體規格,才驚覺之前看到一些開發文章有在抱怨,這類的抱怨應該是硬體商吧?因為製作出來的產品要對外宣稱搭配 "Android x.x" 系統時,必須得到 Google 的認可,不然可會收到律師寄來的信啊!而 CDD 文件就是一個規範條文。接著聽到講師偷酸了一下拿 Android 2.3 來做電視等東西,因為 Android 2.3 有規範硬體需要前後鏡頭,看 CDD 可知,其中後鏡頭是必須的(TV要後鏡頭幹嘛?),不然拿出去賣的產品是無法認證成功的,接著下又提到 Android 2.3 系統本來就規範給 mobile phone 用的,那坊間的七~九吋平板電腦呢?那些是使用 Big Phone 去認證的 XD 聽起來也令人笑一下。


關於取得 Android Open Source 部分,共分成 3 個順位,第一個順位必須是大廠、名牌廠,第二順位是系統廠,第三順位才是 AOSP。主要由第一順位申請拿 source code ,並且有發表產品後,第二順位才開始,例如看見大廠 Android 3.0 的產品已經開始在賣,這時候才輪到第二順位提出申請。然而申請也不是隨便申請就能通過,還必須要有前一版的實機產品,例如想要拿到 Android 3.1 source code ,那還得有先有 Android 3.0 的產品等。


總之,稍微筆記一下,如果想要把 Android 套用在一些產品時,這份文件沒有讀百次也該看個數十次吧!等搞懂規定後再來規劃產品的定位吧。


2011年4月15日 星期五

Android 開發教學筆記 - 使用 Eclipse 小技巧 - 自動補齊延伸功用 & 查詢原始碼(Android Class 的實作)

Eclipse 是一套很強大的 Open Source 編輯器,但我太習慣純文字編輯器,如 vim 系列,導致一直冷落它,甚至只把他當做肥滋茲的 vim 來用。


今天上一門課時,看到講師很俐落地使用 Eclipse ,讓我決定筆記一下,以免自己都忘光。


[自動補齊]:撰寫程式碼,請從底部往上寫(先寫呼叫,再透過 Eclipse 自動補好宣告)


以前寫 C 語言時,總是先宣告變數,接著才開始寫如何使用變數,現在則要反過來用,例如目標:


import android.media.MediaPlayer;

class MyMediaPlayer
{
    public mMediaPlayer;
    private test()
    {
        mMediaPlayer = MediaPlayer.create( this  , R.raw.test.mp3 );
    }
}


上述並非正確可編譯的程式,在此只看著色處。此程式碼代表想要使用 MediaPlayer 這個 class,傳統的實作就是從上面先 import 完,接著宣告,再來使用,但如果是使用 Eclipse 編輯器的話,請倒過來寫,先寫:


MediaPlayer.create( this  , R.raw.test.mp3 );


寫完後若上頭沒 import 的話,一定會出現警告的紅波浪底線,這時候先按快速鍵進行存檔,緊接著用滑鼠去點選剛剛那 line 最左邊的錯誤符號,此時 Eclipse 會告知你可以做什麼修補動作,這時候就可以直接點選 import android.media.MediaPlayer; 啦!就完成 import 部分,並且再存檔後,再多打 "mMediaPlayer =":


mMediaPlayer = MediaPlayer.create( this  , R.raw.test.mp3 );


並且再存檔後,按左邊的錯誤訊息,這時又會推薦你要做什麼事,此時就可以選擇想要的項目,此例該選 Create field ... 那項。


01


如此一來,上頭就自動加上 private mMediaPlayer 宣告部份了!但這一切有什麼好處?除了少打字外就沒了嗎?不,還存在一個隱性好處,那就用 mMediaPlayer 的變數已經被系統記住相對位置了,所以可以在任何一處重新命名,此命名動作將會統一全部更換,而不需要一處處地去更改,這就是方便 Refractory 啦!這才是最重要的地方。


02


除此之外,透過 Eclipse 自動補齊方式,也可以避免打錯字囉。


[查詢原始碼]:按著 CMD 再點選已知的 Class (這是 Mac OSX 指令,在 Windows 上可能是按著 Ctrl 或 Alt)


我記得同事有跟我說過,但因為我沒再用,久就忘了。這次是在 Android 開發環境上,可以先將內建的 packages 擺放在下載的 SDK 相關目錄中:


/path/android-sdk/platforms/android-#/sources/packages


其中 android-# 代表使用的 API 版本,例如 Android 2.1 就是 android-7。接續的 sources 則必須自行建立,預設是不存在的,而 packages 代表的是使用的函式庫,如 MediaPlayer 的話:


/path/android-sdk/platforms/android-#/sources/android/media/MediaPlayer.java


至於程式碼到底該去哪下載?官方介紹 AOSP - Downloading the Source Tree ,透遇上面的介紹,至少會下載 5.5GB 以上的資料回來,並且擺在WORKING_DIRECTORY/framework/base 裡頭,以及分散在各類 packages 裡頭:


Media 類:WORKING_DIRECTORY/framework/base/media/java 裡


Core 類:WORKING_DIRECTORY/framework/base/core/java 裡


如果只要下載這邊的程式碼,可以改挑 git://android.git.kernel.org/platform/frameworks/base.git 這邊,而下載回來的東西,就需要再整理一下 Orz 例如把需要的 code 都集中起來:


$ cd WORKING_DIRECTORY/framework/base
$ find . -regex './[^/]+/java'
./telephony/java
./keystore/java
./wifi/java
./media/java
./opengl/java
./drm/java
./vpn/java
./core/java
./voip/java
./service/java
./graphics/java
./sax/java
$ find . -regex './[^/]+/java' -exec cp -r {} /tmp \;


如此一來,在 /tmp/java/ 裡面就是相關的 sources code 啦,僅須把 android、com 和 javax 三個目錄複製到 /path/android-sdk/platforms/android-#/sources/ 裡就行了。於 2011/04/15 下載,壓縮起來約 5~6 MB 而已,懶得弄可以下載:sources.20110415-2125.zip