我无法为我们的生产应用程序创建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 -->
<property name="dest.dir" location="build" />
<!-- this is empty in the library scripts -->
<path id="import.jars">
<fileset dir="../MySDK/build" includes="*.jar" />
<fileset dir="../MySOAP/build" includes="*.jar" />
</path>
<path id="src.files">
<fileset dir="src" includes="**/*" />
<fileset dir="res" includes="**/*" />
</path>
<!-- TARGET ACTIONS -->
<target name="build" depends="">
<mkdir dir="${dest.dir}" />
<!-- work around a bug requiring app icons to be in the output folder -->
<copy file="${basedir}/res/icon.png" tofile="${dest.dir}/icon.png" />
<rapc
jdehome="${jde.home}"
output="${project.output}"
destdir="${dest.dir}" >
<import refid="import.jars" />
<src refid="src.files" />
<jdp file="${basedir}/project.properties" />
</rapc>
</target>
<target name="sign" depends="build">
<sigtool
codfile="${dest.dir}/${project.output}.cod"
jdehome="${sigtool.jde}"
password="${sigtool.password}" />
</target>
<target name="clean">
<delete dir="${dest.dir}" />
</target>
</project>
Run Code Online (Sandbox Code Playgroud)更新2:我已经更新了build.xml
自最初的帖子.Target build
现在将应用程序图标复制到构建输出文件夹(${dest.dir}
)以解决bb-ant-tools/rapc中的错误.
所以这是一个非常简单的Ant脚本,除了:
FWIW我找到了以下受欢迎的资源,并列出它们,以便它们不需要作为答案添加,并帮助将来寻找信息的任何人:
有关stackoverflow的许多答案 - 请参阅下面的评论
这是我在多个项目中使用的。
<macrodef name="compile">
<attribute name="buildversion" />
<attribute name="description" />
<sequential>
<mkdir dir="${build.dir}" />
<rapc output="${cod.name}_bbminterface" destdir="${build.dir}" verbose="false" quiet="true" nowarn="true">
<src>
<fileset dir="${bbminterface.src.dir}"/>
</src>
<import location="./lib/net_rim_bb_qm_platform.jar" />
<jdp type="library" title="${app.name}_bbminterface" vendor="my vendor" version="@{buildversion}">
<entry title="${app.name}_bbminterface" description=""/>
</jdp>
</rapc>
<rapc output="${cod.name}_bbmimpl" destdir="${build.dir}" verbose="false" quiet="true" nowarn="true">
<src>
<fileset dir="${bbmimpl.src.dir}"/>
</src>
<import location="./lib/net_rim_bb_qm_platform.jar" />
<import location="${build.dir}/${cod.name}_bbminterface.jar" />
<jdp type="library" title="${app.name}_bbmimpl" vendor="my vendor" version="@{buildversion}" runonstartup="true" startuptier="6">
<entry title="${app.name}_bbmimpl" description="" runonstartup="true" startuptier="6"/>
</jdp>
</rapc>
<rapc output="${cod.name}" destdir="${build.dir}" verbose="false">
<src>
<fileset dir="${tmpsrc.dir}" />
</src>
<src>
<fileset dir="${res.dir}" />
</src>
<src>
<fileset file="${lib.dir}/paymentapi.jar" />
</src>
<import location="./lib/net_rim_bb_qm_platform.jar" />
<import location="${build.dir}/${cod.name}_bbminterface.jar"/>
<jdp type="cldc" title="${app.name}" vendor="my vendor" icon="../res/icon.png" version="@{buildversion}" description="@{description}" startuptier="7" ribbonposition="0">
<entry title="${app.name}" icon="../res/icon.png" description="@{description}" runonstartup="true" arguments="boot" systemmodule="true" startuptier="7" ribbonposition="0" />
<entry title="${app.name}" icon="../res/icon.png" description="@{description}" arguments="daemon" runonstartup="true" systemmodule="true" startuptier="7" ribbonposition="0" />
</jdp>
</rapc>
</sequential>
</macrodef>
Run Code Online (Sandbox Code Playgroud)
这是编译代码。我们正在编译一些库,然后编译应用程序,链接刚刚创建的库。
然后签名:
<target name="sign" description="Sign the cod file">
<sigtool codfile="${build.dir}/${cod.name}_bbminterface.cod" password=""/>
<sigtool codfile="${build.dir}/${cod.name}_bbmimpl.cod" password=""/>
<sigtool codfile="${build.dir}/${cod.name}.cod" password="" />
</target>
Run Code Online (Sandbox Code Playgroud)
然后上传到我们的OTA服务器: