BlackBerry - 用于更复杂应用程序的Ant构建脚本

Ric*_*ier 9 ant blackberry

我无法为我们的生产应用程序创建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上存储信息和代码签名密码.

更新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脚本,除了:

  1. 我想知道如何从主应用程序构建中触发子构建(我的答案如下处理).
  2. 最重要的是,由此产生的结果不起作用.

FWIW我找到了以下受欢迎的资源,并列出它们,以便它们不需要作为答案添加,并帮助将来寻找信息的任何人:

Joe*_*Joe 1

这是我在多个项目中使用的。

<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服务器: