1. 程式人生 > >黑莓開發學習(入門教程)

黑莓開發學習(入門教程)

01.1-開發環境

寫Java程式,IDE和模擬器都是很吃資源的傢伙,5G的硬碟空間、1G的記憶體總是需要的。軟體環境我的是WindowXP SP2,開發工具就是jdk1.6.0_16+BlackBerry JDE 4.5.0,替代的工具是eclipse+bb-ant-tools-1.2.4。BlackBerry JDE 4.7.0支援的觸控式螢幕的BB,但大多數人還有衝著Q鍵盤去的吧,還是以BlackBerry JDE 4.5.0為主要的環境。

01.2-閱讀物件

所有對BB程式開發有興趣的TX,由於不是從程式開發的最基本概念說起,需要一些程式開發的基礎知識:瞭解OOP程式設計、知道Java的基本語法規則、熟悉IDE軟體的使用。如果需要補充Java的知識,可以看看《Java2參考大全(第四版)》、《Effective Java中文版》等 ,這些圖書google一下都可以找到電子版。這只是自己學習BB開發的一個記錄,不涉及高階的應用,定位就是一個入門讀物吧。

01.3-學習資源

02-開發環境搭建

摘要:黑莓開發環境的搭建,說簡單也簡單,說複雜也複雜。簡單就是安裝了JDE基本就可以了,複雜就是安裝過程會遇到種種奇怪的問題--不信可以google一下,迷惘的TX有很多。這一章圖文並茂展示了開發環境的搭建,照貓畫虎實施下來,基本可以一次成功。

02.1-思維導圖

02.2-需要的軟體

jdk1.6.0_16 BlackBerry JDE 4.5.0

02.3-搭建步驟

02.3.1-下載JDK SE和BlackBerry JDE 4.5.0。

先安裝JDK後安裝JDE,注意是Java的開發環境JDK不是執行環境JRE,這個下載的時候要注意。

02.3.2-設定系統引數

安裝JDK,預設安裝在C:/Program Files/Java/jdk1.6.0_16。 我的電腦右鍵----屬性,高階頁---環境變數 PATH 路徑後新增“C:/Program Files/Java/jdk1.6.0_16/bin” (按照JDK的安裝路徑相應調整路徑和檔名) 新建兩個系統變數: CLASS_PATH 取值為“.;C:/Program Files/Java/jdk1.6.0_16/lib/tools.jar;C:/Program Files/Java/jdk1.6.0_16/lib;C:/Program Files/Java/jdk1.6.0_16/lib/dt.jar;d:/Program Files/Java/jre6/lib;d:/Program Files/Java/jre6/lib/rt.jar” JAVA_HOME
取值為“C:/Program Files/Java/jdk1.6.0_16”。 這裡設定不正確的話,後續用JDE編譯程式是會提示找不到javac.exe,無法編譯。

02.3.3-設定JDE

開始選單--程式--Research In Motion--BlackBerry JDE 4.5.0--JDE,執行JDE。 JDE選單:Edit-- Preferences 選擇預設的模擬器 設定JDE介面的字型,程式碼編輯器的預設字型實在不好看。

02.3.4-設定模擬器

開啟JDE安裝目錄,比如“C:/Program Files/Research In Motion/BlackBerry JDE 4.5.0”,定位到simulator目錄,可以看到各種型號模擬器的配置檔案。 開啟JDE中預設模擬器對應的配置檔案,如8820.xml,在</SimulatorConfiguration>前新增兩行: <Application>net.rim.blackberry.lang.zh_CN_Pinyin</Application>
<Application>net.rim.blackberry.lang.zh_CN.renderingSupport</Application>
這樣模擬器系統就有了中文顯示支援中文輸入支援。 可以將8820.xml檔案中開發時不需要載入的應用程式刪除掉,這樣可以提高模擬器的啟動速度。如: <Application>net.rim.java.tasks</Application>
<Application>net.rim.java.memopad</Application>
<Application>net.rim.java.docViewer</Application>
<Application>net.rim.java.passwordkeeper</Application>
<Application>net.rim.java.browser</Application>
<Application>net.rim.java.browser.javascript</Application>
<Application>net.rim.java.help</Application>
<Application>net.rim.java.maps</Application>
<Application>net.rim.java.blackberrymessenger</Application>
點選執行simulator目錄下的fledgelauncher.exe,選擇預設模擬器對應的配置檔案,啟動模擬器。 在模擬器中開啟Options--Language,或根據設定嚮導設定,將語言設定成“中文(簡體)”。

02.4-其他開發環境的搭建

eclipse+bb-ant eclipse是個IDE編輯器,bb-ant是個Ant的blackberry外掛,使用這兩個組合可以不要看JDE醜陋的介面了。 經過實踐,上述方法是可行可用的。

03-經典的HelloWorld程式

摘要:學習每一個語言,都離不開這個HelloWord。JDE中的HelloWord雖然是簡單的,但至少有幾個作用:一是可以判斷除錯開發環境是否正常;二是展現了BB程式的基本框架,後續的程式設計不過是不斷的擴充套件而已。 既然是經典的東西,我也就隨俗了。通過這個簡單的程式,可以瞭解學習BB程式的基本框架,無論多麼複雜的軟體也難逃此廄了。

03.1-思維導圖

03.2-建立工作區

在BlackBerry IDE中,專案都歸屬在工作區(workspace)下,這樣便於專案的管理和專案間依存關係的建立。工作區(workspace)的配置資訊儲存在.jdw檔案中,一個專案檔案可以歸宿與不同的工作區(workspace)。 點選JDE的選單:File->New workspace,點選“Browse”按鈕選擇工作區的存放路徑和檔名。 由於JDE對中文的支援不是太好,建議所有的檔名和檔案存放目錄都用英文命名,否則有可能在編譯時提示找不到路徑。

03.3-建立專案檔案

在BlackBerry IDE中,專案是一個應用程式或應用庫的所有程式碼檔案、資原始檔、影象等的集合,專案的配置資訊儲存在.jdp檔案中。 為了更有條理地組織專案檔案,在工作區存放目錄下建立一個FirstDemo子目錄,並在FirstDemo目錄下分別在建立三個子目錄src、img、res,分別用來存放原始碼、圖片、其他資源。 處理完成後的目錄結構如下圖: 在JDE的工作區點選MyApp.jdw,右鍵->Create new Project in MyApp.jdw....。點選“Browse”按鈕選擇專案檔案的存放路徑和檔名。預設情況下,專案名就是最後生成程式的名字

03.4-建立程式檔案

在JDE的工作區點選FirstDemo,右鍵->Create new File in Project....。點選“Browse”按鈕選擇程式檔案(.java)的存放路徑和檔名。 JDE將自動生成一個程式框架 刪除自動生成的程式程式碼,將如下程式碼複製拷貝進去: /*
作者:小葉 xiaoye.org
釋出:http://hi.baidu.com/netis
可以任意轉載, 轉載時請務必以超連結形式標明文章原始出處和作者資訊
*/

package src;
//匯入庫
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.MainScreen;
public class HelloWorld extends UiApplication {   
  //程式的建構函式       
    public HelloWorld() {   
         HelloWorldScreen screen = new HelloWorldScreen();   
         pushScreen(screen);   
     }   
     //程式的入口函式 java程式執行都需要這個 否則會提示找不到main的提示
    public static void main(String[] args) {   
         HelloWorld app = new HelloWorld();   
         app.enterEventDispatcher();   
     }
    //視窗類    
    public class HelloWorldScreen extends MainScreen {            
            public HelloWorldScreen() {
                     add(new LabelField("Hello World!"));   
         }   
     }
   
}

03.5-編譯

點選JDE的選單:Build->Build...,或直接快捷鍵F7進行編譯。若JDE下方的輸出視窗最後顯示"Build complete.",恭喜你--第一個BlackBerry程式已成功生成了

03.6-執行

點選JDE的選單:Debug->Go...,或直接快捷鍵F5進行程式執行除錯。JDE會自動呼叫“02.3.4-設定模擬器”中設定的模擬器進行執行除錯。 首次執行會出現如下提示: 點選“Don't ask this again”,繼續。待模擬器啟動成功,就可以在應用程式介面中看到FirstDemo程式(和專案名一致)了。 在模擬器中用滑鼠中鍵(或PC機的回車鍵)點選執行FirstDemo程式,就可以看到經典的“Hello World”了。

03.7-程式釋出

首先設定待發布程式的一些資訊,否則生成的ALX檔案不符合要求。 在JDE的工作區點選FirstDemo,右鍵->properties....。在屬性設定視窗的General輸入有關的版權資訊,最好都是英文 點選JDE的選單:Project -->Generate ALX file...,生成BB程式安裝必須的.alx檔案。 執行後在專案所在目錄就可以看到.cod檔案和.alx檔案了,通過BB“桌面管理器”就可以安裝FirstDemo到BB上了。  

04-標準介面的HelloWorld程式

摘要:看到Hello World顯示在BB螢幕,是不是有些激動?但這個程式最多隻能算是測試開發環境是否正常可用的實驗程式碼,沒有友好的介面,沒有良好的互動。一個像樣的程式只要要有個彩色的視窗、有使用者輸入、有按鈕、有選單吧?完善一下標準的HelloWorld程式。 標準的HelloWorld程式也太簡陋了,有了太多的想法要實現: ▲能否設定一個漂亮的程式圖示,而不是黑乎乎的命令列視窗? ▲能否設定一個程式標題? ▲能否放一個按鈕點選後提示歡迎資訊? ▲能否自定義一個選單?

04.1-思維導圖


04.1-為程式新增圖示

在JDE的工作區點選FirstDemo,右鍵->properties....。在屬性設定視窗點選Add新增一個影象檔案,支援.png、.gif、.jpg。 影象檔名必須是英文名,否則編譯的時候會提示“I/O Error: invalid UTF-8 encoding”
程式編譯執行後圖標就會顯示成一個笑臉:

04.2-設定程式標題

通過如下程式碼即可實現: //設定程式的標題
LabelField title = new LabelField("Hello World",Field.FIELD_HCENTER);
this.setTitle(title);

04.3-設定程式主介面的背景

要實現這個功能需要分兩步,

第一步:從容器控制元件VerticalFieldManager基礎一個新佈局控制元件BackgroundManager,增加一個背景顏色的屬性,並通過過載VerticalFieldManager的paintBackground來實現自定義設定的顯示。

//定義一個窗口布局控制元件   主要是為了能改變視窗背景顏色
public static class BackgroundManager extends VerticalFieldManager
{
    private int bgColor = Color.NAVY;
    public BackgroundManager()
     {
        super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );
         bgColor = Color.NAVY;
     }
    
    public BackgroundManager(int bgcolor)
     {
        super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );
         bgColor = bgcolor;            
     }
   //重新設定程式背景色彩
    protected void paintBackground(Graphics g)
     {                   
         g.setBackgroundColor(bgColor);
         g.clear();
        super.paint(g);
     }
} 第二步:建立一個背景容器BackgroundManager命名為mgr,並將其他控制元件放置在這個背景容器上,最後將背景容器放置到程式主視窗HelloWorldScreen上。 //背景容器例項
BackgroundManager mgr = new BackgroundManager(Color.MEDIUMAQUAMARINE);
//新增一個輸入域
edtName = new BasicEditField("輸入您的姓名: ","小葉", 20,Field.FIELD_LEFT );
mgr.add(edtName);
//新增一個按鈕 點選後根據輸入的內容提示
btnShow = new ButtonField("顯示歡迎資訊",Field.FIELD_HCENTER | ButtonField.CONSUME_CLICK );
btnShow.setChangeListener(this);
mgr.add(btnShow);    
this.add(mgr); 下圖為實施上兩步後的效果:

04.4-增加一個使用者輸入域

通過如下程式碼即可實現: 為了後續點選按鈕可以取得錄入的內容,在建構函式前定義一個輸入域控制元件。 //定義類的元素
private BasicEditField edtName = null;  //姓名輸入域 建立和新增資料域。 //新增一個輸入域
edtName = new BasicEditField("輸入您的姓名: ","小葉", 20,Field.FIELD_LEFT );
mgr.add(edtName); 效果見上圖。

04.5-新增一個按鈕

//新增一個按鈕 點選後根據輸入的內容提示
btnShow = new ButtonField("顯示歡迎資訊",Field.FIELD_HCENTER | ButtonField.CONSUME_CLICK );
btnShow.setChangeListener(this);
mgr.add(btnShow);    
this.add(mgr); 對按鈕事件介面也需要繼承後定義下介面處理 //處理按鈕事件
public void fieldChanged(Field field, int ctx)
{
    if (field == btnShow) {        
         Dialog.alert("歡迎您-"+edtName.getText());
     }
}; 程式執行後,點選按鈕,按鈕就會根據錄入的內容顯示歡迎資訊,如下圖。

04.6-自定義選單

首先,建立需要顯示的子選單,為區分與系統預設選單項,選單顯示名稱以*開始。 //定義顯示資訊選單專案
public MenuItem showItem= new MenuItem("*顯示歡迎資訊", 160, 10 )
{
    public void run()
     {
         Dialog.alert("歡迎您-"+edtName.getText());
     }
};
//定義顯示關閉選單專案
public MenuItem closeItem= new MenuItem("*退出", 170, 10 )
{
    public void run()
     {
         onClose();
     }
}; 其次,過載選單生成函式,使得自定義選單新增到系統預設選單中。 //過載makeMenu 新增自定義的選單
protected void makeMenu(Menu menu, int instance)
{       
   menu.add(showItem);
   menu.add(closeItem);
} 選單顯示效果如下:
點選選單後顯示對話方塊:

04.7-完整程式碼

為了程式碼的維護和可讀性,將定義視窗類的程式碼單獨成一個檔案HelloWorldScreen.java。建立新程式檔案的方法見第三部分的“03.4-建立程式檔案”。

主程式HelloWorld.java

/*
HelloWorld.java
主程式
作者:小葉 xiaoye.org
釋出:http://hi.baidu.com/netis
可以任意轉載, 轉載時請務必以超連結形式標明文章原始出處和作者資訊
*/

package src;
//匯入庫
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.MainScreen;
public class HelloWorld extends UiApplication {   
    //程式的建構函式       
    public HelloWorld() {   
         HelloWorldScreen screen = new HelloWorldScreen();   
         pushScreen(screen);   
     }   
     //程式的入口函式 java程式執行都需要這個 否則會提示找不到main的提示
    public static void main(String[] args) {   
         HelloWorld app = new HelloWorld();   
         app.enterEventDispatcher();   
     }
}

視窗類HelloWorldScreen.java

/*
HelloWorldScreen.java
視窗類 實現了程式的使用者介面
作者:小葉 xiaoye.org
釋出:http://hi.baidu.com/netis
可以任意轉載, 轉載時請務必以超連結形式標明文章原始出處和作者資訊
*/

package src;
//匯入庫
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.system.Display;
//視窗類    
final class HelloWorldScreen extends MainScreen implements FieldChangeListener {
    //定義類的元素
    private BasicEditField edtName = null;  //姓名輸入域
    private ButtonField btnShow = null;      //顯示按鈕
    //建構函式
    public HelloWorldScreen() {
        //父類的事件 顯示預設的上下文選單
        super(DEFAULT_MENU | DEFAULT_CLOSE);
        //設定程式的標題
         LabelField title = new LabelField("Hello World",Field.FIELD_HCENTER);
        this.setTitle(title);
        //背景容器例項
         BackgroundManager mgr = new BackgroundManager(Color.MEDIUMAQUAMARINE);
        //新增一個輸入域
         edtName = new BasicEditField("輸入您的姓名: ","小葉", 20,Field.FIELD_LEFT );
         mgr.add(edtName);
        //新增一個按鈕 點選後根據輸入的內容提示
         btnShow = new ButtonField("顯示歡迎資訊",Field.FIELD_HCENTER | ButtonField.CONSUME_CLICK );
         btnShow.setChangeListener(this);
         mgr.add(btnShow);    
        this.add(mgr);
     }
    
    //定義顯示資訊選單專案
    public MenuItem showItem= new MenuItem("*顯示歡迎資訊", 160, 10 )
     {
        public void run()
         {
             Dialog.alert("歡迎您-"+edtName.getText());
         }
     };
    //定義顯示關閉選單專案
    public MenuItem closeItem= new MenuItem("*退出", 170, 10 )
     {
        public void run()
         {
             onClose();
         }
     };
    
     //過載makeMenu 新增自定義的選單
     protected void makeMenu(Menu menu, int instance)
      {       
         menu.add(showItem);
         menu.add(closeItem);
     }
    
    //處理按鈕事件
    public void fieldChanged(Field field, int ctx)
     {
        if (field == btnShow) {        
             Dialog.alert("歡迎您-"+edtName.getText());
         }
     };  
    
    //過載onClose, 退出時提示
    public boolean onClose()
     {
        if ( Dialog.ask(Dialog.D_YES_NO, "確定退出嗎?") == Dialog.YES )
         {
             System.exit(0);
            return true;
         }
        return false;
     }  
    
    //定義一個窗口布局控制元件   主要是為了能改變視窗背景顏色
    public static class BackgroundManager extends VerticalFieldManager
     {
        private int bgColor = Color.NAVY;
        public BackgroundManager()
         {
            super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );
             bgColor = Color.NAVY;
         }
        
        public BackgroundManager(int bgcolor)
         {
            super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );
             bgColor = bgcolor;            
         }
       //重新設定程式背景色彩
        protected void paintBackground(Graphics g)
         {                   
             g.setBackgroundColor(bgColor);
             g.clear();
            super.paint(g);
         }
     }
       
}

05-再說開發環境和入門階段的一些問題

摘要:按照教程按圖索驥,應該是可以寫一個像樣的HelloWorld程式了。但學習程式設計不是就此止步,需要解決實際的問題。開發一個構思中的軟體需要一個好的開發環境、入門過程中也遇到了一些問題、如何快速提高編寫程式碼的水平......等等諸如此類的問題也浮上水面。

05.1-除錯一個順手的開發環境

第二章“02-開發環境搭建”提到了兩種方法:使用BlackBerry JDE 4.5.0或eclipse+bb-ant,前者不利於程式碼效率,後者配置太複雜了,變更一個Wordspace需要重頭來一遍。使用下來還是eclipse+BlackBerry_JDE_plug-in_for_Eclipse比較實用和易用。

BlackBerry_JDE_plug-in_for_Eclipse可以從BlackBerry的官方網站上下載,JDE限制中國大陸的IP地址下載,但是這個外掛在填寫一些簡單的資料後可以下載。下載地址:http://na.blackberry.com/eng/developers/javaappdev/javaeclipseplug.jsp   。
下圖為下載前需要填寫資料的表單:

BlackBerry_JDE_plug-in_for_Eclipse支援的eclipse是3.4版本的,eclipse官方網站上現在提供的版本是3.5的,外掛安裝是提示版本過低,需要下載eclipse 3.4然後再安裝外掛。
一般使用Eclipse IDE for Java Developers 這個版本就可以了。

將eclipse3.4解壓到一個目錄,然後執行“BlackBerry_JDE_PluginFull_1.0.0.67.exe”安裝BlackBerry_JDE_plug-in_for_Eclipse,在安裝的過程中選擇eclipse3.4目錄。

安裝完畢,設定JDE Version,eclipse選單“Window->Preferences->BlackBerry”,配置BlackBerry JDE的引數。

中文化設定參見:“02-開發環境搭建-02.3.4-設定模擬器”,其中模擬器的目錄改到eclipse下,如:
D:/eclipse3.4/plugins/net.rim.eide.componentpack4.5.0_4.5.0.16/components/simulator

05.2-使用eclipse寫黑莓程式

05.2.01-Eclipse 選單 File->New->Project

點選“Next”建立一個HelloWorld的專案,專案檔案結構清單如下:

05.2.02-建立程式檔案


eclipse選單“File->New->Class”,建立一個新的Java Class檔案“HelloWorld”作為主程式。

在建立一個新的Java Class檔案“HelloWorldScreen”作為主視窗類。

HelloWorld.javaHelloWorldScreen.java

/*
作者:小葉xiaoye.org
釋出:http://hi.baidu.com/netis
可以任意轉載, 轉載時請務必以超連結形式標明文章原始出處和作者資訊
*/

import net.rim.device.api.ui.UiApplication;
public class HelloWorld extends UiApplication {
    public HelloWorld() {
         HelloWorldScreen screen = new HelloWorldScreen();
         pushScreen(screen);
     }
    public static void main(String[] args) {
         HelloWorld app = new HelloWorld();
         app.enterEventDispatcher();
     }
} /*
作者:小葉 xiaoye.org
釋出:http://hi.baidu.com/netis
可以任意轉載, 轉載時請務必以超連結形式標明文章原始出處和作者資訊
*/

import net.rim.device.api.ui.component.LabelField;   
import net.rim.device.api.ui.container.MainScreen;  
public class HelloWorldScreen extends MainScreen {   
    public HelloWorldScreen() {   
         add(new LabelField("Hello World!"));   
     }   
}  


05.2.03-編譯

專案選項中選擇了Build Automatically,eclipse已自動編譯檔案了。

修改程式碼後,Alt+B重新生成程式。

05.2.03-除錯和執行

設定除錯引數,點選除錯圖示開啟Debug Configurations。

在設定畫面中選擇模擬器引數

後續開發就可以直接點選這個“BB8820”運行了。

05.3-加速程式的除錯

在開發過程中發現,除錯或執行程式的過程中,每次點選前述配置檔案“BB8820”執行,需要相當長時間才能完成模擬器載入、程式執行。在不需要對程式設定斷點跟蹤的情況下,可以通過如下方式快速看到程式執行的結果。

(1)執行JDE安裝目錄下的“C:/Program Files/Research In Motion/BlackBerry JDE 4.5.0/simulator/fledgelauncher.exe”,啟動模擬器;
(2)模擬器選單“File->Load Java Programe......”,開啟專案所在目錄下的“HelloWorld.cod”,模擬器會重新載入程式,點選程式執行即可看到執行效果。節省了模擬器啟動的時間。

05.4-API庫的選中和簽證

如果使用net.rim.blackberry開頭的blackberry專用的API,大多數API需要取得BlackBerry的簽證才可以使用。在程式中使用這些專用的API,模擬器可以執行但是無法執行在裝置上。

05.4-學習優秀程式碼

開發程式,學習優秀的程式碼可以起到事半功倍的作用。LogicMail是一個J2ME E-Mail客戶端支援IMAP和POP協議,可以執行在OS 4.2以上版本的BB中。這是一個開源的軟體,可以從這裡檢視其原始碼,可以學習到許多。

      RIM公司為BlackBerry開發提供了多種開發平臺,不同平臺的開發人員可以選擇自己熟悉的開發工具,但是個人覺得還是BlackBerry JDE Plub-In for Eclipse最好用

       BlackBerry JDE Plug-In for Eclipse下載地址:http://www.blackberry.com/developers