2013年8月29日 星期四

Rendering 3D Anaglyph in OpenGL - 2

since: 2013/08/22
update: 2013/08/29

reference:
0. 原文: Rendering 3D Anaglyph in OpenGL
1. I touchs: Rendering 3D Anaglyph in OpenGL - 1

E. 視差方程式:
      1. 之前提到, 視差可在品質上度量到. 現在開始要在位於某個深度的頂點, 引進視差
          的觀念來獲得方程式. 要畫出立體浮雕, 所需設定的 OpenGL 並不是重要的關鍵,
          重要的是在你的互動應用中, 所繪製的場景全部範圍都要使用合適的視差. 考慮
         下面的圖解, 其中, 頂點 V 位在深度 w, 並且是在收斂距離 C 再往後的地方:
     
                                  圖四: 測量位在收斂距離 C 後方的頂點 V 之視差值

      2. 兩眼間隔為 D, 收斂距離為 C. 連結左邊攝影機 L 與頂點 V 的線, 在收斂平面上
          相交為 P. 同樣地, 連結右邊攝影機 L 與頂點 V 的線, 在收斂平面上相交為 Q.
          與頂點 V 相關聯的視差距離 PQ 定義為 p(小p). 現在, 考慮三角形 LVR,
          從截線定理(intercept theorem)可以得到:

PQLR=VQVR

          類似地, 在三角形 QVM 與 VRN 中, 我們可以得到:


VQVR=VMRN=wCw=1C/w

          因此, 

PQLR=pD=1C/w
          或
p=D(1C/w)

      3. 類似地, 下面的圖為比收斂距離更近的頂點: 

                                  圖五: 測量位在比收斂距離 C 更近的頂點 V 之視差值                                      

      4. 與頂點 V 相關聯的視差距離 PQ: p(小p), 可以再次套用截線定理獲得:

PQLR=QVVR=QVQRQV=QVQR1QVQR
           在三角形 QNR 中, 因為 VM 平行 RN, 因此:


QVQR=VMRN=CwC=1w/C
           因此,
PQLR=pD=1w/Cw/C=C/w1
           或,
p=D(1C/w)

      5. 這個方程式與位在收斂距離後方的頂點相同, 只差了一個負號. 負號意味著:
          收斂平面上的頂點投影, 相對於攝影機是在相反的一側. 如果忽視方程式中
          的正負符號, 負視差可以被理解成: 頂點開始移動得比收斂距離更近.
          p=D(1C/w)可繪製成以下的圖:
 
                                  圖六: 給定收斂距離與兩眼間隔, 頂點深度的視差變化量

      6. 圖中顯示, 當頂點移動越遠離場景, 所產生的視差越接近兩眼間隔 D.
          在收斂距離 C 的地方, 視差為零; 而所有深度大於收斂距離的頂點, 視差皆保持
          正值. 在場景中, 所有比收斂距離 C 更近的頂點, 視差為負值, 並且快速地接近
          無限大. 注意到, 當頂點的深度 w 等於 C/2 時, 所得到的視差值等同於兩眼間隔.
          過大的負視差, 會使觀察者的眼睛視線偏離, 而造成變形, 應該避免.
          根據攝影機的鏡頭與所要拍攝的效果(浮出螢幕或沈入螢幕)作為基準, 來選擇
          實用的收斂深度. 典型的兩眼間隔保持在收斂距離的 1/30, 並且在場景中,
          要避免讓物體近於收斂距離一半的位置上. (即: 深度不可小於 C/2 )
           

Rendering 3D Anaglyph in OpenGL - 1

since: 2013/08/13
update: 2013/08/29

reference:
0. 原文: Rendering 3D Anaglyph in OpenGL

A. 說明:
     本系列為翻譯文章, 以及在 Mac OS X 上的實作練習, 翻譯的內容可能有所誤差
     或尚未能完整表達原作著的意思, 並添加了部分個人的註解說明.

---------------------------------------------------------------------------------

B. 概要:

     1. 使用 OpenGL 來畫出 3D 立體圖片(anaglyphs) 是一件相當容易(且有趣)的事.
         希望你知道什麼是立體圖片(anaglyphs), 並且懂得如何去觀看它們. 如果不清楚
         的話, 請閱讀之前的這篇文章. 這篇教學文章的焦點是要提供你足夠的背景知識,
         與片段的程式碼來完成之後的工作. 之後, 你就可以在自己的程式中, 畫出有趣
         的立體圖片.

     2. 我們的焦點會放在: 從一個給定的 3D 場景, 來產生紅藍立體圖片
         (red-cyan anaglyph). 這個場景將會被繪製二次: 一次是給左眼觀看的攝影機,
         僅允許讓紅色光線通過; 另一次是給右眼觀看的攝影機, 僅允許讓青綠色(綠+藍)
         光線通過. 要實作這個想法, 你需要了解在立體視覺(stereoscopic vision)當中,
         視差(parallax)所扮演的角色, 以及應用在 OpenGL 上的投影(projection)與
         視野(viewing)之概念. 這篇教學文章假定你熟悉 OpenGL 投影(projection)與
         模型視野(modelview)的轉換( transforms), 如果你了解那些內容就繼續閱讀;
         不然的話, 請閱讀 紅皮書 中的這個章節, 以作好準備. 

---------------------------------------------------------------------------------

C. 視差觀念:

    1. 什麼是視差(parallax)? 當你未使用紅藍立體眼鏡來觀看 3D 立體圖片時, 會發現
        圖片中物體的邊緣有紅色與青綠色的成份. 請觀察底下的圓柱體(cylinder):

                                                      圖一: 浮雕例子 - 圓柱體
    2. 在現實裡, 我們眼中的物體藉由在左眼與右眼間橫向位移的量產生了立體感,
        因此, 在平面的影像上(照片或顯示螢幕), 人類的視覺系統需要深度(depth)的
        訊息, 才能產生立體的視覺效果. 當我們談到視差, 就是意指影像中的這種確切
        的位移. 要在上方的圖片中看到視差的效果, 使用紅藍(red/cyan)立體眼鏡
        (紅色在左眼), 並試著將滑鼠指標停留在稍微超出圓柱體左邊的末端. 這樣
        看起來: 圓柱體左邊的末端是沈入螢幕內; 相反的, 圓柱體的前端(右邊)似乎
        或多或少以相同的深度浮出螢幕. 所以, 要畫出浮雕(anaglyph)的效果, 我們
        要試著去完成的是: 在場景中(scene)為物體取得正確種類的視差, 其餘的部分,
        人類的大腦會免費自動地完成!   

---------------------------------------------------------------------------------

D. 視差基礎:
      1. 視差不僅是一種性質上的呈現, 它有數值, 並且可以是正值, 負值或零.  
          在應用中, 視差的建立基於以下: 定義二個對應於分隔一段距離的左右眼
          (稱為: 二眼之間的距離或簡稱: 兩眼間隔)之攝影機, 並且沿著視線方向在
          某個深度會有一個平面(稱為: 收斂距離 convergence distance), 在那裡,
          視差為零. 位在收斂深度上的物體, 看起來與螢幕是在相同的深度. 物體位在
          比收斂距離更接近攝影機的地方, 看起來似乎是從螢幕走出來; 而物體位在
          比收斂距離更深遠的地方, 看起來似乎是在螢幕內部. 下面的圖例說明了
          這些狀況:      

                                                      圖二: 位在不同深度的頂點視差

      2. 在這張圖片中, 有二個虛擬的攝影機, 一個是模擬左眼的位置(沿著 X 軸方向,
          對原點上作少量的負位移), 另一個是模擬右眼的位置(沿著 X 軸方向, 對原點
         上作少量的正位移). 這二個攝影機被分開的距離, 等同人類左右眼之間的位移量,
         其值平均大約是65公釐(6.5公分). 於是, 會有一個零視差的深度稱為收斂深度.
         你可以把它想像成是沿著負 Z 軸方向, 位在收斂深度的地方, 有一個順著 x-y 軸
         的平面. 圖中顯示的三個頂點: v1, v2 和 v3, 將用來說明不同種類的視差.

      3. 對每頂點(v1, v2 和 v3), 想像有條線分別從頂點連到每個攝影機, 並觀察與收斂
          平面相交在何處. 左右眼攝影機在收斂平面上交會的二點之間隔, 就是該頂點所
          產生視差的判斷基準: 
 
          a. 頂點 v1:
              相對於收斂處, 位於更大的深度而產生了視差. 可以觀察到在收斂平面上的紅點
              與青綠(cyan)點, 與二個攝影機是同向性的: 紅點是朝著左邊的攝影機方向, 青綠
              (cyan)點是朝著右邊的攝影機方向. 這樣子稱為正視差, 而且當影像繪出時, 頂點
              v1 會顯示在螢幕內部(沈入).       

          b. 頂點 v2:
              位於與收斂平面相同深度的地方產生零視差. 正如之前的例子, 在此, 收斂平面
              處沒有被分隔的紅點與青綠(cyan)點. 當影像繪出時, 頂點 v2 會顯示在與螢幕
              相同深度的地方.  

          c. 頂點 v3:
              位在比收斂距離小的地方, 也產生了視差. 但是投射在收斂平面上的紅點與青綠
              (cyan)點, 與攝影機的位置是反向的. 對應到左邊攝影機的點在收斂平面上是偏往
              右邊, 而對應到右邊攝影機的點在收斂平面上是偏往左邊. 這樣子稱為負視差,
              而且當影像繪出時, 頂點 v3 似乎顯示在螢幕外部(浮出).

      4. 再看看另一個浮雕, 說明了頂點在不同的深度所產生的典型視差: 

                               圖三: 二十面體所顯示的負, 零與正視差(比原圖失真許多)

      5. 在圖中, 有三個二十面體. 在底部的那一個, 是場景中最遠的; 在頂部的那一個,
          是離攝影機最近的. 位在中間的二十面體, 是幾乎與螢幕位在相同的深度. 注意到
          產生最近和最遠二十面體的視差方式, 是有著相反的組合.(以下解釋) 最近的二十
          面體, 右邊有紅色的邊緣, 左邊有青綠色的邊緣. 當用3D紅藍眼鏡觀看, 這表示
          負視差(紅色濾鏡在左眼), 二十面體稍微地顯示在螢幕外部(浮出). 然而, 圖片中
          底部最小的二十面體, 左邊有紅色的邊緣, 右邊有青綠色的邊緣. 這種組合與用來
          觀看的有色眼鏡是相同的. 所產生的是正視差, 二十面體顯示在螢幕內部(沈入),
          在位於中央二十面體的後面. 而位在中央的二十面體, 是與螢幕有著相同的深度,
          畫出來幾乎沒有視差(零視差).                

2013年3月16日 星期六

Tab View: Different Tab Content in different Activity

since: 2013/03/16
update: 2013/03/16

reference:
Chickenrice's Workshop: [Android] 建立Tab View的三種方式(下)

A. 在專案的 res/layout 目錄下新增 tab1.xmltab2.xml
// tab1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView android:id ="@+id/tab1_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="I'm Tab 1"
        android:textSize="18sp" /> 

</LinearLayout>


// tab2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
   
    <TextView android:id ="@+id/tab2_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="I'm Tab 2"
        android:textSize="18sp" /> 
   
</LinearLayout>


---------------------------------------------------------------------------

B. 在專案的 src 套件目錄下新增 Tab1.javaTab2.java:

// Tab1.java
package home.android.hello;

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

public class Tab1 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab1);
    }    

}


// Tab2.java
package home.android.hello;

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

public class Tab2 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab2);
    }

}

---------------------------------------------------------------------------

C. 修改專案的 AndroidManifest.xml 檔案
     新增以下的設定:
....

        <activity android:name="home.android.hello.Tab1"
                  android:label="這是Tab1" >
        </activity>
       
        <activity android:name="home.android.hello.Tab2"
                  android:label="這是Tab2" >
        </activity>  
     
       
    </application>

</manifest>


---------------------------------------------------------------------------

D. 修改專案 src 套件目錄下的 MainActivity.java 如下:
package home.android.hello;

import android.os.Bundle;
import android.app.AlertDialog;
//import android.app.Activity;
import android.app.TabActivity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;


public class MainActivity extends TabActivity implements OnTabChangeListener {   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        //取得Tabhost參考
        TabHost tabHost = getTabHost();       
       
        //設定各tab頁面
        tabHost.addTab(tabHost
        .newTabSpec("tab1")
        .setIndicator("TAB1")
        .setContent(new Intent(this, Tab1.class))
        );
                     
        tabHost.addTab(tabHost
        .newTabSpec("tab2")
        .setIndicator("TAB2")
        .setContent(new Intent(this, Tab2.class))
        );
       
        tabHost.setOnTabChangedListener(this);   


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    @Override
    public void onTabChanged(String tabId) {
        // TODO Auto-generated method stub
        new AlertDialog.Builder(this).setTitle("Hint").setMessage(tabId)
        .setPositiveButton("OK", null).show();
       
    }

   
}

2013年3月13日 星期三

How to support all the different resolutions of android products

since: 2013/03/13
update: 2013/03/13

reference:
馬克周.技術隨筆: [Android] 滿足各種不同螢幕尺寸


A. 說明:
     1. 先不考慮不同裝置大小的版面配置, 在此先以依裝置大小來縮放版面的方式處理.
         屬於通用的處理方式, 並不能保證任何 android 裝置都能適用.
 
     2. 在版面設計上長度(位置)單位要使用 spdp

----------------------------------------------------------------------------------------

B. 假設 UI 設定檔(activity_main.xml)有ㄧ TextView 元件如下:
    <TextView id="@+id/txtHello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="25sp"
        android:layout_marginTop="45sp"
        android:text="Hello World !"
        android:textSize="20sp"
        android:textColor="#000"/>

----------------------------------------------------------------------------------------

C. 在 Eclipse 的 Package Explore 專案中的 res/ 目錄下新增以下資料夾:
     values-hdpi, values-ldpi, values-mdpivalues-xdpi
     (p.s. 預設只有: values 資料夾)
     分別新增 dimens.xml 如下: (在此以 res/values/res/values-hdpi/ 為例)

// ---> res/values/dimens.xml 的內容
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- normal dpi -->
    <dimen name="txtHello_layout_marginLeft">25sp</dimen>
    <dimen name="txtHello_layout_marginTop">45sp</dimen>
    <dimen name="txtHello_textSize">20sp</dimen>
</resources>


// ---> res/values-hdpi/dimens.xml 的內容
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- hdpi  -->
    <dimen name="txtHello_layout_marginLeft">50sp</dimen>
    <dimen name="txtHello_layout_marginTop">108sp</dimen>
    <dimen name="txtHello_textSize">32sp</dimen>   
</resources>

----------------------------------------------------------------------------------------

D. 將原本 UI 設定檔的 TextView 元件修改如下:
    <TextView android:id="@+id/txtHello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/txtHello_layout_marginLeft"
        android:layout_marginTop="@dimen/txtHello_layout_marginTop"
        android:text="Hello World !"
        android:textSize="@dimen/txtHello_textSize"
        android:textColor="#000"/>

2013年2月23日 星期六

Setting Up the Android Device for Development on Windows7

since: 2013/02/23
update: 2013/02/23

reference:
1. OEM USB Drivers | Android Developers2. Using Hardware Devices | Android Developers


A. 安裝 Google USB Driver
     1. Eclipse > Window > Android SDK Manager:

     2. 確認 Google USB Driver 為 Installed.

     3. 關閉 Eclipse.
-------------------------------------------------------------------------------------------

B. 開啟 Android 設備上的 USB 測試功能
     1. 打開 Android 設備(在此為 Nexus 7 版本: 4.2.2)

     2. 設定 > 關於平板電腦 > 版本號碼
         連續點擊 "版本號碼" 數次後,Android 會回應你再點擊三次就表示你是
         開發人員的訊息(訊息會出現在螢幕下方,而且會有次數)。
         此時繼續點擊,點擊到 Android 告訴你 "開發人員選項" 已開啟為止。

     3. 回到上一層,點選 "開發人員選項".
         > 勾選 "USB 偵錯".

     4. 接著用 USB 跟電腦連接,這時電腦會出現安裝驅動程式,先不用理會.

-------------------------------------------------------------------------------------------

C. 安裝 Android 設備的驅動程式
     1. 電腦 > 內容 > 裝置管理員 > 可攜式裝置 > "顯示驚嘆號的設備"

     2. "顯示驚嘆號的設備" > 右鍵 > "更新驅動程式軟體"
         > "瀏覽電腦上的驅動程式軟體"
         > 選取剛剛安裝的 Google USB Driver:
            C:\Lanli\EclipseAndroidDev\android-sdk-windows\extras\google\usb_driver
         > 下一步, 接著電腦就會自動安裝.

-------------------------------------------------------------------------------------------

D. 在 Eclipse 裡, 啟用 Debug 功能

     1. 開啟專案後, 打開 AndroidManifest.xml 檔案, 在 <application> 標籤裡,
         加入以下的屬性設定: android:debuggable="true"
         備註: a. 可以不需要設定, 因為使用 Eclipse 來啓動 App 會自動啓用 Debug 模式.
                  b. 如果手動啟用了, 記得在 buildrelease App 之前, 將其停用.

     2. Run > Run Configurations > Android Application > 專案名稱:
         > 右邊 Target 頁籤
         > Deploy Target Selection Mode: Always prompt to pick device
    備註: 如此一來, 每次執行時皆可選擇設備.

-------------------------------------------------------------------------------------------

E. 執行應用程式
     1. 選取專案 > 右鍵 >  "Run As" > "Android Application"

     2. 選取 Android 設備 > OK

-------------------------------------------------------------------------------------------

F. 備註: 在 Mac OS X 上實機測試
    1. 不需要安裝 USB Driver

    2. 只需要 B, DE 的步驟即可.

2013年2月11日 星期一

Installing the Android SDK on the Mac OS X


since: 2013/02/11
update: 2013/02/21


A. 新增軟體開發的資料夾
     新增一個用來放置所有開發軟體的資料夾(Java 除外)
       ex: AndroidDevMac (在此, 資料夾位置為: /Lanli/AndroidDevMac)

-------------------------------------------------------------------------------------------

B. 安裝JAVA
     下載 JAVA SDK: http://www.oracle.com/technetwork/java/javase/downloads/
     , 並安裝. (在此為: jdk-7u13-macosx-x64.dmg)

-------------------------------------------------------------------------------------------

C. Eclipse

    1. 下載 Eclipse Classic: http://www.eclipse.org/downloads/
        採用版本: eclipse-SDK-4.2.1-macosx-cocoa-x86_64.tar.gz

    2. 解壓縮後將整個 eclipse 資料夾放到 /Lanli/AndroidDevMac 下

-------------------------------------------------------------------------------------------

D. Android SDK
   1. 下載 Android SDK: http://developer.android.com/sdk/
      > USE AN EXISTING IDE
         採用版本: android-sdk_r21.0.1-macosx.zip

   2. 解壓縮後將整個 android-sdk-macosx 資料夾放到 /Lanli/AndroidDevMac 下

   3. 將工具的路徑, 加到系統的 PATH 變數裡.
       開啟終端機
       $ cd ~
       $ sudo vi .profile
       $ export PATH=/Lanli/AndroidDevMac/android-sdk-macosx/tools:/Lanli/AndroidDevMac/android-sdk-macosx/platform-tools:$PATH
      
       關閉終端機, 再重新開啓:
       $ echo $PATH

-------------------------------------------------------------------------------------------

E. 安裝 Android Development Tools (ADT) plugin
     1. 開啟 Eclipse (選擇 workspace, 在此為 /Lanli/workspace)

     2. Help > Install New Software... > Add >

        Name: ADT
        Location: https://dl-ssl.google.com/android/eclipse/

        > OK
        > Select All (會將 Developer ToolsNDK Plugins 全選)
        > Next > Next
        > 勾選: I accept the terms of the license agreements
        > Finish (開始下載並安裝)
        > Security Warning > OK
        > Restart Eclipse > Yes

     3. Eclipse 重開後,
         a. 先關閉出現的警告(按 Close)
         b. 與取消安裝新的 Android SDK(按 Cancel)
             (之後會再自行設定)

-------------------------------------------------------------------------------------------

F. Android SDK Setting
   1. 開啟 Eclipse
 
   2. Eclipse > 偏好設定 >
       Android > SDK Location: Browse...
     
      /Lanli/AndroidDevMac/android-sdk-macosx
     
      > OK
      > Close

-------------------------------------------------------------------------------------------

G. Android SDK Manager
   1. 開啟 Eclipse
 
   2. Window > Android SDK Manager
 
   3. 可以勾選所有的項目, 在此勾選: Tools, Android 2.2, Android 4.2Extras
      > 按下 "Install xx packages..."
      > Accept All
      > Install
      (開始下載並安裝)
    
      > 完成後, 關閉 Eclipse 

-------------------------------------------------------------------------------------------

H. Android Virtual Device (AVD) Setting
    1. 開啟 Eclipse
 
    2. Window > Android Virtual Device Manager
       > New
       > AVD Name: AVD-2.2-480x800
          Device: 4.0" WVGA(480x800:hdpi)
          Target: Android 2.2 - API Level 8
          取消勾選: Hardware keyboard present
                            Display a skin with hardware controls
          SD Card: size: 16 MiB
       > OK
       > Start > Lanuch (啟動)

-------------------------------------------------------------------------------------------

I. UTF-8 Setting
   1. Eclipse > 偏好設定 > General > Workspace

   2. Text file encoding: Other: UTF-8
      > OK

-------------------------------------------------------------------------------------------

J. 備註:
   當更改整個 AndroidDevMac 資料夾位置時, 須再次檢查 Eclipse:
   1. Eclipse > 偏好設定 > Android > SDK Location:
 
   2. Eclipse > 偏好設定 > Java > Install JREs:   

2013年2月10日 星期日

Seting up an Android Development Environment


since: 2013/02/10
update: 2013/02/10


A. 新增軟體開發的資料夾
   1. 在任意槽新增一個用來放置所有開發軟體的資料夾
       ex: EclipseAndroidDev
     
   2. 在此, 資料夾位置為: C:\Lanli\EclipseAndroidDev
       並在 EclipseAndroidDev 下新增 JDK 資料夾.

-------------------------------------------------------------------------------------------


B. Java SDK
   1. 下載 JAVA SDK: http://www.oracle.com/technetwork/java/javase/downloads/
       採用版本: Java SE 7u13 及 Java SE 7 Documentation
     
   2. 預設安裝位置: C:\Program Files\Java\jdk1.7.0_13
      
   3. 將 C:\Program Files\Java\jdk1.7.0_13 下的全部檔案及
       jdk-7u11-apidocs.zip(Java文件檔)
       copy 到 C:\Lanli\EclipseAndroidDev\JDK
       p.s. 至此, 便可以將 JAVA SDK 從控制台中移除.
              (可以只保留額外安裝的 JRE C:\Program Files\Java\jre7, 如果有的話)

-------------------------------------------------------------------------------------------
     
C. Eclipse
   1. 下載 Eclipse IDE for Java Developers: http://www.eclipse.org/downloads/
       採用版本: eclipse-java-juno-SR1-win32-x86_64
     
   2. 解壓縮到 C:\Lanli\EclipseAndroidDev 下(會自動產生 eclipse 資料夾)

-------------------------------------------------------------------------------------------

D. Android SDK
   1. 下載 Android SDK: http://developer.android.com/sdk/
      > DOWNLOAD FOR OTHER PLATFORMS > Windows >
         android-sdk_r21.0.1-windows.zip
         採用版本: Android SDK r21.0.1
     
   2. 解壓縮 android-sdk_r21.0.1-windows.zip 到 C:\Lanli\EclipseAndroidDev 下
       (會自動產生 android-sdk-windows 資料夾)

-------------------------------------------------------------------------------------------

E. 新增批次檔: 
   1. 在 C:\Lanli\EclipseAndroidDev 下新增一個 AndroidDevStart.bat 檔案, 內容如下:
set WORK_HOME=%cd%
set JAVA_HOME=%WORK_HOME%\JDK
set JRE_HOME=%WORK_HOME%\JDK\jre
set ANDROID_SDK_HOME=%WORK_HOME%\android-sdk-windows
set PATH=%JAVA_HOME%\bin;%JRE_HOME\bin;%PATH%
cd eclipse
start eclipse


   2. AndroidDevStart.bat > 傳送到 > 桌面(建立捷徑)

-------------------------------------------------------------------------------------------

F. 安裝 Android Development Tools (ADT) plugin
   1. 點二下 AndroidDevStart.bat 檔案, 開啟 Eclipse
      (選擇 workspace, 在此為 C:\Lanli\workspace)
     
   2. Help > Install New Software... >
      Work with: https://dl-ssl.google.com/android/eclipse/ > Add >

      Name: ADT
      Location: https://dl-ssl.google.com/android/eclipse/

      > OK
      > Select All (會將 Developer Tools 與 NDK Plugins 全選)
      > Next > Next
      > 勾選: I accept the terms of the license agreements
      > Finish (開始下載並安裝)
      > Security Warning > OK
      > Restart Eclipse > Yes
     
   3. Eclipse 重開後,
      a. 先關閉出現的警告(按 Close)
      b. 與取消安裝新的 Android SDK(按 Cancel)
         (之後會再自行設定)

-------------------------------------------------------------------------------------------

G. Android SDK Setting
   1. 開啟 Eclipse
  
   2. Window > Preferences >
      Android > SDK Location: Browse...
      C:\Lanli\EclipseAndroidDev\android-sdk-windows
      > OK
      > Close

-------------------------------------------------------------------------------------------

H. Android SDK Manager 
   1. 開啟 Eclipse
  
   2. Window > Android SDK Manager
  
  
   3. 可以勾選所有的項目, 在此勾選: Tools, Android 2.2, Android 4.2Extras
      > 按下 "Install xx packages..."
      > Accept All
      > Install
      (開始下載並安裝)
     
      > 完成後, 關閉 Eclipse

-------------------------------------------------------------------------------------------

I. Android Virtual Device (AVD) Setting 
   1. 開啟 Eclipse
  
   2. Window > Android Virtual Device Manager
      > New
      > AVD Name: AVD-2.2-480x800
         Device: 4.0" WVGA(480x800:hdpi)
         Target: Android 2.2 - API Level 8
         取消勾選: Hardware keyboard present
                            Display a skin with hardware controls
         SD Card: size: 16 MiB
      > OK
      > Start > Lanuch (啟動)

-------------------------------------------------------------------------------------------

J. UTF-8 Setting
   1. Window > Preferences > General > Workspace

   2. Text file encoding: Other: UTF-8
      > OK

-------------------------------------------------------------------------------------------
           
K. 備註:
   當更改整個 EclipseAndroidDev 資料夾位置時, 須再次檢查 Eclipse:
   1. Window > Preference > Android > SDK Location:
  
   2. Window > Preferences > Java > Install JREs: