黑莓開發學習(入門教程)
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.002.3-搭建步驟
02.3.1-下載JDK SE和BlackBerry JDE 4.5.0。
先安裝JDK後安裝JDE,注意是Java的開發環境JDK不是執行環境JRE,這個下載的時候要注意。02.3.2-設定系統引數
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