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


沒有留言:

張貼留言