(我已经解决了我的问题,所以编辑它看起来更像是博客文章 - 最终的工作解决方案已被放置为下面的"答案".)
我想将我们的BB库(v4.5或v5.0)打包成JAR格式,因此我们可以将应用程序源代码提供给客户端而不提供库源代码.
目前,我的SDK和我的应用程序都使用源代码进行设置,作为同一工作区中的不同项目.所有项目都要编译 我的SDK设置为库项目,我的应用程序作为应用程序.
在每个应用程序中,我将SDK项目添加到构建路径.
Eclipse完美地处理构建,创建各种COD文件.我将COD文件复制并解压缩到同一文件夹中,运行updatejad以组合JAD文件,最终得到完美安装的许多COD文件.
问题是 - 库必须是源代码.
关于此,有许多相互矛盾的信息来源.这个过程很简单,但没有很好的记录.在某些尝试中,我遇到了以下问题:
不幸的是,似乎从RIM引用的主文档不正确 - 详情如下.
(我希望可以将这个问题与以下长链接列表交叉引用?)
StackOverflow链接:
这个给出了其他链接 - 非常有用:
这些不太有用:
轮缘:
我无法为我们的生产应用程序创建Ant构建脚本.
我一直在阅读很多关于Ant和bb-ant-tools的文章.我已经关注了很多关于Ant和BB的stackoverflow问题(在评论中引用以"链接"问题).我想帮助一个比通常的"Hello World!"更复杂的脚本.风格的应用.我当前的构建过程完全在Eclipse中运行,并手动完成.
对于这个问题,我想问一下如何使用Ant来构建一个使用2个(或更多个)不同库项目(也需要构建)的项目,而根本不使用Eclipse?
我安装了Ant,bb-ant-tools.我已经在设备上构建并部署了一个基本的Hello World,使用这些工具遵循基本示例.我创建了一个构建脚本和一些属性文件; 但是当我运行脚本时,最终产品不能在手机上运行(手机用户界面在启动屏幕上冻结).
我有3个构建脚本,每个库一个,主应用程序一个.这些是相同的,除了项目名称(并且可以在某个时候组合成一个通用的导入脚本).3个java项目中的每一个都有一个与之相关的Ant属性文件.我还使用3个常用属性文件来定义常量,在JDE上存储信息和代码签名密码.
common.properties:
jde.home=C:/development/tools/bb-jde/jde4.5/components
sigtool.jde = ${jde.home}
sigtool.password = xxx_pass_xxx
Run Code Online (Sandbox Code Playgroud)project.properties(用于SOAP库):
output=MySOAP
type=midlet
Run Code Online (Sandbox Code Playgroud)project.properties(用于内部SDK库):
output=MySDK
type=midlet
Run Code Online (Sandbox Code Playgroud)更新1:我已经更新了自初始发布以来的库属性文件.以前我设置type=library(基于RIM文档).根据我在这篇文章中概述的研究(BlackBerry - 在自己的项目中使用自己的JAR文件),我尝试改为type=midlet.这样可以获得更好的结果(至少在我的平台BB JDE 5.0上).
project.properties(对于我的应用):
output=MyApp
title=App
type=cldc
vendor=Richard
version=1.0.7
description=A nice app
icon=icon.png
Run Code Online (Sandbox Code Playgroud)build.xml(除了顶部的名称外,所有相同的,并且2个库脚本没有在import.jars中声明的文件集):
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="MyApp" default="build">
<!-- BLACKBERRY ANT TOOLS -->
<property name="bb-ant-tools.home" location="C:/development/tools/bb-ant-tools" />
<taskdef resource="bb-ant-defs.xml" classpath="${bb-ant-tools.home}/bb-ant-tools.jar" />
<!-- CONFIG FILES -->
<property file="${common.basedir}/common.properties" />
<property prefix="project" file="project.properties" />
<!-- FOLDERS …Run Code Online (Sandbox Code Playgroud)我想在我的BlackBerry项目中添加一个jar文件.我尝试通过以下方式添加jar文件 - >
但在那之后,每当我尝试运行应用程序时,我都会收到"模块abc.jar未找到错误".
如何将jar文件添加到BlackBerry项目?
我正在开发一个Blackberry Java开发人员可以导入到他们项目中的库项目.它使用受保护的RIM API,要求它进行代码签名,我已经完成了.但是,我无法让我的Jar导入并使用简单的helloWorld应用程序.我正在使用eclipse插件Blackberry-JDE.
自从我找到解决方案后,我删除了我尝试过的东西,只留下了解决方案......
构建SDK/Libary(使用BB-ANT-TOOLS,无论是在eclipse还是独立)
步骤:
A)我必须
使用BB-ANT-TOOLS 将我的SDK的jar构建为'cldc'应用程序而不是'library' 项目.这解决了我上面遇到的大部分问题.
B)然后我添加了一个ANT任务来从步骤A中获取生成的JAR并执行以下操作:
注意:我写了一个砍下来的BB-ANT-TOOLS蚂蚁脚本,以展示如何使用它来完成上述两个步骤.该脚本包含在下面.
将SDK jar作为最终用户或在您自己的项目中使用.
然后在bb-eclipse中集成jar,你可以执行以下操作:
A)将jar添加到BuildPath
B)在"订购和导出"选项卡上的"Java构建路径"下,选择要导出的jar.这会导致rapc将jar构建到COD文件中,因此最后只有一个COD.
现在当用户构建这个项目时,jar会被集成到最终的cod文件中,并且很容易传送到手机或SIM卡.
<?xml version="1.0" encoding="UTF-8"?>
<project name="XXXXXMobileLib" default="full" basedir=".">
<description>
Description: Builds the BBLIB. Uses bb-ant-tools to build, sign and package for blackberry.
</description>
<taskdef resource="bb-ant-defs.xml" classpath="BIN/BB_ANT_lib/bb-ant-tools.1.x.x.jar" />
<property environment="env" />
<!-- User defined Vars -->
<property name="builderRoot" value="." />
<property name="SIG_PASSWORD" value="XXXXXXXXX" />
<property name="javaHome" value="${env.JAVA_HOME}" />
<echo>${javaHome}</echo>
<property name="jdehome" value="${env.BBJDE_HOME}\" />
<property name="simulator" value="${jdehome}\simulator" />
<property …Run Code Online (Sandbox Code Playgroud) 如何使用Ant(bb-ant-tools)将JAR文件编译为COD?即没有其他源文件
最终,我需要一个在构建期间运行Jar Jar Links(jarjar)的脚本,以解决在多个应用程序中使用我们的sdk的命名空间问题.Jarjar将JAR文件作为输入,我假设它输出一个JAR文件.
因此,要在bb-ant-tools构建中运行jarjar,我需要知道如何将输出JAR编译成COD.
我只关注这部分问题,以尽量减少其他可能的错误来源.一旦我可以掌握将JAR构建到COD中,我将尝试jarjar步骤.
1)我可以将我的项目构建到工作COD中,在设备上签名并运行.
2)要包含sdk代码,我目前将源文件夹添加到主项目构建中.(将来我想知道如何将库作为JAR包含在构建中 - BlackBerry-Ant脚本将JAR包含在没有外部依赖的项目中)
3)此步骤的输出包括通常的文件:
4)我尝试运行第二个构建,获取上面的JAR文件并将其用作rapc调用中唯一的源文件.我通过将src标记指向rapc仅包含我的JAR文件的文件夹来执行此操作.
在构建的最后部分,当rapc是adding文件时,我收到错误:
java.util.zip.ZipException: duplicate entry: MyApp-1.cod
Run Code Online (Sandbox Code Playgroud)
(已编辑的构建输出中的错误的完整详细信息)
我可以看到这是rapc第二次尝试添加此文件.我不明白为什么,因为JAR中只有该文件的一个副本.
...etc以使其可读)build:
[mkdir] Skipping C:\development\ant\new_test\MyApp\build because it already exists.
[copy] Copying 1 file to C:\development\ant\new_test\MyApp\build
[copy] Copying C:\development\ant\new_test\MyApp\icon.png to C:\development\ant\new_test\MyApp\build\icon.png
[rapc] Compiling 1 source files to MyApp.cod
[rapc] Executing 'C:\Java\jdk1.6.0_24\jre\bin\java.exe' …Run Code Online (Sandbox Code Playgroud) 我无意中听到另一个我正在讨论黑莓开发的团队 - 他们正在为黑莓自动构建问题.特别是证书签名存在问题 - 他们还没有弄清楚 - 现在是手动步骤.
当然,他们/我们是手持式开发的新手,但是建立服务器和自动化命令行证书签名的任何指针都是最受欢迎的.
鉴于我们公司在BB开发方面的短暂经验,可能需要具体的例子和细节.
我假设hudson可以正常工作 - 我们只需要为构建和签名找出一个命令行.
在我看来,我想要实现的目标非常简单,但却变得令人难以置信的痛苦.
我有ProjectA,它是一个BlackBerry Application项目.我有ProjectB,这是一个Java库项目.我想从ProjectA引用ProjectB.我可以添加一个引用,但是当我运行ProjectA时,它不起作用.我有两个项目的源代码,都使用Java编译器1.4编译
我尝试了很多东西,但由于某种原因一切都失败了:
1. ProjectB上的pre-verify.exe 失败并显示错误"JAR文件创建失败,错误为-1"我可以看到已经创建了cod和jar文件,但是当将jar文件添加到ProjectA并运行它时,它没有不行.不确定我是否需要添加.cod文件.
2.创建新的BlackBerry Library Project并在ProjectA中引用它 我创建一个新项目ProjectC,然后将jar的jar添加到它.然后我在ProjectA中添加对ProjectC的引用.但是我无法从ProjectB导入类
请提出一条出路.我正在使用Eclipse插件并依赖Eclipse的构建功能
我在Eclipse的Blackberry Java Plug-in中创建了两个Blackberry项目,即MyProjectApp(设置为应用程序项目)和MyProjectLib(设置为Library项目).现在我创建了一个简单的MainScreen类,如下所示:
public class SampleScreen extends MainScreen {
public SampleScreen (){
RichTextField topbar = new RichTextField("hello world");
add(topbar);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我将MyProjectLib导出为Jar文件,并在MyProjectApp中添加相同的外部Jar.现在我要使用以下方法触发SampleScreen:
public class MyProjectMain extends UiApplication{
public static void main(String[] args) {
MyProjectMain theApp = new MyProjectMain();
theApp.enterEventDispatcher();
}
public LangHostMain(){
// Push a screen onto the UI stack for rendering.
pushScreen(new SampleScreen());
}
}
Run Code Online (Sandbox Code Playgroud)
它给出了以下错误:
模块"MyProjectApp"存在验证错误.启动MyProjectApp时出错:模块"MyProjectApp"出现验证错误.
但是,如果我将SampleScreen类移动到MyProjectApp,它工作正常.导出Jar并使用它有什么问题?需要什么类型的验证?