黑莓开发学习(入门教程)

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-学习资源

 
BlackBerry Developer Forums - http://supportforums.blackberry.com/rim/?category.id=BlackBerryDevelopment
BlackBerry Developer Zone - http://na.blackberry.com/eng/developers/
BlackBerryForums Developer Forum - http://www.blackberryforums.com/developer-forum/    
官网的知识库 http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/customview.html?func=ll&objId=348583
电子图书下载 - http://www.ebookpdf.net   
Inblackberry(中文) - http://www.inblackberry.com/
 

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,在前添加两行:
net.rim.blackberry.lang.zh_CN_Pinyin
net.rim.blackberry.lang.zh_CN.renderingSupport
 
这样模拟器系统就有了 中文显示支持中文输入支持
 
可以将 8820.xml文件中开发时不需要加载的应用程序删除掉,这样可以提高模拟器的启动速度。如:
net.rim.java.tasks
net.rim.java.memopad
net.rim.java.docViewer
net.rim.java.passwordkeeper
net.rim.java.browser
net.rim.java.browser.javascript
net.rim.java.help
net.rim.java.maps
net.rim.java.blackberrymessenger
 
点击运行simulator目录下的 fledgelauncher.exe,选择默认模拟器对应的配置文件,启动模拟器。
 
在模拟器中打开Options--Language,或根据设置向导设置,将语言设置成“中文(简体)”。
 

02.4-其他开发环境的搭建

 
eclipse+bb-ant
 
eclipse是个IDE编辑器,bb-ant是个Ant的blackberry插件,使用这两个组合可以不要看JDE丑陋的界面了。
具体的设置方法参见: http://sco.0fees.net/?cat=1 或   http://blog.csdn.net/wilesilly/archive/2009/07/12/4341932.aspx
经过实践,上述方法是可行可用的。
 
 
 

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最好用

       首先安装JDK,官方下载地址:http://java.sun.com/javase/downloads/index.jsp

       Eclipse官方下载地址:http://www.eclipse.org/downloads/,Eclipse是一个硬盘程序,一般把下载的压缩文件解压就可以使用。

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

你可能感兴趣的:(黑莓开发学习(入门教程))