我无法为我们的生产应用程序创建Ant构建脚本。

我已经阅读了很多有关Ant和bb-ant-tools的文章。我在Ant和BB上关注了许多stackoverflow问题(下面的注释中引用了这些问题以“链接”这些问题)。我希望获得比通常的“Hello World!”更复杂的脚本的帮助。样式的应用程序。我当前的构建过程完全在Eclipse中运行,并手动完成。

对于这个问题,我想问,如何使用Ant来构建一个使用2个(或更多)不同的库项目(也需要构建)的项目,而根本不使用Eclipse?

我安装了Ant,bb-ant-tools。我已按照基本示例使用这些工具在设备上构建并部署了基本的Hello World。我已经创建了一个构建脚本和一些属性文件。但是当我运行脚本时,最终产品无法在手机上运行(手机UI在启动屏幕上卡住)。

我有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
    
  • project.properties(用于SOAP库):
    output=MySOAP
    type=midlet
    
  • project.properties(用于内部SDK库):
    output=MySDK
    type=midlet
    

  • 更新1:自从最初发布以来,我已经更新了库属性文件。以前,我设置了type=library(基于RIM文档)。根据本文(BlackBerry - use own JAR file in own project)中概述的研究,我尝试更改为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
    
  • build.xml(除了顶部的名称外,其他都相同,并且这两个库脚本没有在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>
    

  • 更新2:自从最初发布以来,我已经更新了build.xml。现在,目标build将应用程序图标复制到构建输出文件夹(${dest.dir})中,以解决bb-ant-tools/rapc中的错误。

    因此,这是一个非常简单的Ant脚本,除了:
  • 我想知道如何触发主版本的子版本
    应用程序构建(我的答案below处理了该问题)。
  • 最大的一点是,它的结果输出确实
    不行。


  • FWIW,我找到了以下流行的资源,并列出了它们,以便不再需要将它们添加为答案,并帮助以后的任何人查找信息:
  • Basic Ant Tutorial
  • Automating Eclipse-Based BlackBerry Project With Ant
  • How to use rapc from RIM
  • jarjar tool
  • 和关于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>
    

    这是编译代码。我们先编译几个库,然后编译应用程序,链接刚刚创建的库。

    然后进行签名:
    <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>
    

    然后上传到我们的OTA服务器:

    关于BlackBerry-适用于更复杂应用程序的Ant构建脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8942230/

    10-13 09:33