如何把第三方类库jar包编译为BlackBerry类库cod文件

林蕴藉
2023-12-01

问题的核心:如何把第三方类库jar包编译为可以安装的BlackBerry类库cod文件。
  注:某些时候,没有第三方类库的源码,只有 jar包,不考虑将class文件反编译。
问题解决的最重要步骤:使用bb-ant-tools ant脚本工具把第三方类库jar包编译为可以安装的BlackBerry类库cod文件。

环境:BlackBerry_JDE_PluginFull_1.1.1,内置的net.rim.ejde.componentpack4.5.0_4.5.0.21。

 

 

------------------------------------------------------------------------------------------
第一步:创建BlackBerry Project,测试应用,发现module not found或者class not found错误。

启动eJDE 1.1,创建BlackBerry Project
项目名称 StockQuote

创建目录 lib
下载kSOAP MIDP JAR文件ksoap-midp.zip,拷贝到 lib下面,重新命名为ksoapmidp.jar  (去掉中间的-,改文件后缀zip为jar)
  http://ksoap.objectweb.org/software/downloads/

选择菜单 Project -> Java Build Path --> Libraries --> Add JARs
  选择项目StockQuote,选择目录lib,选择文件 ksoapmidp.jar

点击eclipse菜单 Run --> Run Configurations...
  新建一个BlackBerry Simulator配置,在栏目Projects里面勾上StockQuote项目,在Simulator栏目里面 勾上 "Launch Mobile Data System Connection Service (MDS-CS) with simulator“
  点击Run按钮

点击模拟器里面的StockQuote图标,运行报错
  JVM Error 104
  Uncaught RuntimeException
  Error starting StockQuote: Module 'ksoapmidp" not found.

模拟器 选择菜单 Simulator --> USB Cable Connected
在DOS窗口下面执行命令 javaloader -u dir > a.txt
  发现模拟器里面的module只有StockQuote,没有ksoapmidp
Name                                           Version          Size      Created
---------------------------------------------  ---------------  --------  ------------------------
...
StockQuote                                     1.0.0            2268      Wed Feb 10 12:50:52 2010


------------------------------------------------------------------------------------------
第二步:preverify 第三方类库

如果不做preverify ,后面执行ant作业的时候 偶尔出现错误:[rapc] org.ksoap.ClassMap: Error!: Missing stack map at label: 59
   参考:http://www.blackberryforums.com/developer-forum/130803-missing-stack-map-label.html


拷贝 ksoapmidp.jar 到c:/temp目录

set JDE=C:/TOOLS/BlackBerry_JDE_PluginFull_1.1.1/plugins/net.rim.ejde.componentpack4.5.0_4.5.0.21/components
set PATH=%JDE%/bin;%PATH%
cd C:/temp
preverify -verbose -d . -classpath %JDE%/lib/net_rim_api.jar ksoapmidp.jar

------------------------------------------------------------------------------------------
第三步:使用bb-ant-tools ant脚本工具把第三方类库jar包编译为可以安装的BlackBerry类库cod文件

下载:bb-ant-tools
http://bb-ant-tools.sourceforge.net/ 点击Downloads按钮
  例如:http://downloads.sourceforge.net/project/bb-ant-tools/bb-ant-tools/1.2.4/bb-ant-tools-1.2.4-bin.zip?use_mirror=ncu
下载:apache ant
http://ant.apache.org/bindownload.cgi
  例如:http://apache.etoak.com/ant/binaries/apache-ant-1.8.0-bin.zip
拷贝bb-ant-tools.jar 到  C:/TOOLS/apache-ant-1.8.0/lib


在c:/temp目录下面 编写一个build.xml文件
注意:
1)destdir="c:/temp"
   这个目录c:/temp 必须是存在的目录,否则ant执行的时候保持  build.xml:14: destdir must be a directory   
2)<include name="ksoapmidp.jar" /> 
<!-- here must be relative directory, otherwise ant report:
              build.xml:14: srcdir attribute or <src> element required!  -->


set ANT_HOME=C:/TOOLS/apache-ant-1.8.0
set JAVA_HOME=C:/TOOLS/jdk1.6.0_17
set PATH=%ANT_HOME%/bin;%PATH%
set JDE=C:/TOOLS/BlackBerry_JDE_PluginFull_1.1.1/plugins/net.rim.ejde.componentpack4.5.0_4.5.0.21/components
set PATH=%JDE%/bin;%PATH%
cd C:/temp
ant

提示:
     [rapc] C:/Temp/ksoapmidp.jar(org/kxml/parser/AbstractXmlParser.class):0: Warning!: local variable(s) { local#2 } initialized but not used in: org.kxml.pars
er.AbstractXmlParser.readTree(Vector)
     [rapc] Populating
     [rapc] No errors.

BUILD SUCCESSFUL
Total time: 7 seconds

------------------------------------------------------------------------------------------
第四步:把生成的module ksoapmidp手工安装到模拟器里面,测试

模拟器 选择菜单 Simulator --> USB Cable Connected
在DOS窗口下面执行命令 Javaloader -u load ksoapmidp.jad

提示:
RIM Wireless Handheld Java Loader
Copyright 2001-2007 Research In Motion Limited
Connected
Loading ksoapmidp.jad                 Done
27544 bytes sent at ~220352 bps
Disconnected


在模拟器里面可以看到ksoapmidp的应用
或者是
javaloader -u dir也可以看到


现在可以在模拟器里面点击StockQuote图标运行这个需要ksoapmidp类库支撑的程序了。

--------------------------------------------
第五步A:把第三方类库和应用程序移动打包为alx格式,将来可以通过桌面管理器或者BES push发布。

把c:/temp/下面的所有文件拷贝到C:/BB.Dev/workspace.mywork/StockQuote/deliverables/4.5.0 下面

编辑BlackBerry_App_Descriptor.xml,选择Build栏目,勾上"Generate .alx file(Desktop Deployment/BES Push)"
选择 eclipse菜单 Project -> BlackBerry -> Package Project(s)
编辑生成的alx文件,
  修改    <files >
    StockQuote.cod

   </files>

   <files >
    ksoapmidp.cod
    StockQuote.cod
   </files>

--------------------------------------------
第五步B:把第三方类库和应用程序移动打包jad格式,将来可以通过OTA方式发布。
把c:/temp/下面的所有文件拷贝到C:/BB.Dev/workspace.mywork/StockQuote/deliverables/4.5.0 下面
选择 eclipse菜单 Project -> BlackBerry -> Package Project(s)
编辑生成的jad文件


<?xml version="1.0" encoding="UTF-8"?>
<project name="StockQuote" default="buildLibrary" basedir=".">

 <property name="jdehome" location="C:/TOOLS/BlackBerry_JDE_PluginFull_1.1.1/plugins/net.rim.ejde.componentpack4.5.0_4.5.0.21/components" />
 <property name="javahome" location="C:/TOOLS/jdk1.6.0_17" />

 <taskdef resource="bb-ant-defs.xml" classpath="lib/bb-ant-tools.jar" />

 <target name="buildLibrary" description="Build ksoapmidp library for BlackBerry">
  <rapc jdehome="${jdehome}"
   jdkhome="${javahome}"
   destdir="c:/temp"
   output="ksoapmidp"
   quiet="false">
   
   <jdp type="library"
    title="ksoapmidp"
    vendor="KSOAP Porject"
    version="1.20"
    description="ksoapmidp library"
    arguments=""
    systemmodule="false"
    runonstartup="false"
    startuptier="7"
    ribbonposition="0"
    icon="">
   </jdp>
   
   <src>
    <fileset dir=".">
                <include name="ksoapmidp.jar" /> 
    </fileset>
   </src>
  </rapc>
 </target>

</project>

 类似资料: