9

これは次のフォローアップです: BlackBerry - 独自のプロジェクトで独自の JAR ファイルを使用& BlackBerry - より複雑なアプリ用の Ant ビルド スクリプト. 現在、この問題は以下で解決されています。

標的

したい:

  1. Ant ( bb-ant-tools ) を使用してライブラリを JAR ファイルにビルドする
  2. その JAR ファイルをプロジェクトに含める
  3. Antを使用して、そのプロジェクトをデバイス上で実行される COD にビルドします (外部 COD ファイルなし)。

重要な部分は、Ant を使用してビルドの最終段階を行うことです。

この問題について私が見つけたすべての投稿は、最終ビルド段階で Eclipse を使用しています ( BlackBerry の詳細 - 自分のプロジェクトで自分の JAR ファイルを使用する)。


進捗

  1. Ant を使用してライブラリ プロジェクトを JAR にビルドできます。
  2. Eclipse では、その JAR ファイルをプロジェクトに追加して、必要に応じてビルドできます (単一の COD、外部依存関係なし)。デバイス上で実行されます。
  3. Ant では、追加の COD ライブラリに依存してランタイム コードを含むビルドを作成することもできます。これは、私が必要としているものに近いものです。

問題

Ant を使用して最終的なプロジェクトをビルドできます。しかし、結果の COD ファイルには、私のライブラリのランタイム コードは含まれていません

私が読んだ多くの投稿は、ライブラリ用の追加の COD ファイルを使用してこれを行う方法を示しています。これは避けたいと思います。

Ant を使用して、外部依存関係なしでプロジェクトに JAR を含めるにはどうすればよいですか? Eclipseを使用してできるので、これは可能だと思います。


回避策

私の現在の回避策は、SDK/ライブラリ プロジェクトをJAR ファイルではなくソース コードとして含めることです (以下の esaj の回答に従って)。これには JAR アプローチよりもいくつかの欠点がありますが、デバイス上で正常に実行されるビルドがあります。


(この質問を次のリンクの長いリストと相互参照してもよろしいですか?)

StackOverflow リンク:

これは他のリンクを提供します-非常に便利です:

これらはあまり役に立ちません:

リム:

4

2 に答える 2

4

rapc の下の src セクションでライブラリを指定しようとしましたか?

例えば:

<rapc ...>
  <src>
    <fileset dir="${buildDirectory}">
      <include name="src/**/*.rrh" />
      <include name="src/**/*.rrc" />
      <include name="src/**/*.java" />
      <include name="res/**/*.*" />
      <!-- Libraries -->
      <include name="lib/**/*.*" />
    </fileset>
  </src>
</rapc>
于 2012-05-17T10:36:38.733 に答える
1

昨年も同様の問題がありました。複数のBBアプリケーションのベースとして使用される「フレームワーク」を作成しましたが、複数のCODで問題が発生しました(正確には覚えていません。デバイスのようなものはインストールを拒否しました外部 COD が最初に個別にインストールされていない場合は、同じ外部 CoD を持つ複数のアプリケーション、次にアプリケーション)。アプリケーションは個別にインストールできるため (ある人はアプリ A のみをインストールし、別の人はアプリ B のみをインストールし、別の人は A と B の両方をインストールする可能性があります)、それを使用するすべてのアプリにフレームワーク全体を含める必要がありました。私は bb-ant-tools を使用してこの Ant スクリプトを作成しました (うまくいけば、アプリに固有のものを削除したり、パッケージ名を難読化するなどして、何も壊れていないことを願っています)。

<?xml version="1.0" encoding="UTF-8"?>

<project name="${description}" default="build" basedir=".">

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

    <!-- rapc and sigtool require the jde.home property to be set -->
    <!-- NOTE: You may need to copy the signature files from Eclipse\plugins\net.rim.ejde\vmTools to the components\bin -dir 
        if the keys were installed using the Eclipse-plugin     -->
    <property name="jdehome" value="C:\BB\Eclipse\plugins\net.rim.ejde.componentpack5.0.0_5.0.0.25\components" />

    <!-- Framework source locations, these must be set correctly -->
    <property name="frameworkRes.dir" value="C:\BB\workspace\BB_Framework\res" />
    <property name="frameworkSrc.dir" value="C:\BB\workspace\BB_Framework\src\com\whatever\frame" />

    <!-- Locations for simulator, binaries, jde home, don't touch these -->
    <property name="simulator" value="${jdehome}\simulator" />
    <property name="bin" value="${jdehome}\bin" />
    <property name="jde.home" location="${jdehome}" />

    <!-- directory of simulator to copy files to -->
    <property name="simulator.home" location="${simulator}" />

    <property name="src.dir" location="src" />
    <property name="build.dir" location="build" />
    <property name="temp.dir" location="C:\tempsrc" />

    <!-- Project specific -->
    <!-- Application title -->
    <property name="app.title" value="Application Name" />
    <property name="app.version" value="1.0.0" />
    <!-- Value to prepend before frame-class packages -->
    <property name="frame.prefix" value="appname" />
    <!-- Name of the COD to produce --> 
    <property name="cod.name" value="Appname" />

    <target name="build">
        <mkdir dir="${build.dir}" />
        <delete dir="${temp.dir}" />
        <mkdir dir="${temp.dir}" />
        <mkdir dir="${temp.dir}\${frame.prefix}" />

        <copy toDir="${temp.dir}">
            <fileset dir="${src.dir}">
                <include name="**/*.java" />
            </fileset>
        </copy>

        <copy toDir="${temp.dir}\${frame.prefix}">
            <fileset dir="${frameworkSrc.dir}">
                <include name="**/*.java" />
            </fileset>
        </copy>

        <copy toDir="${temp.dir}\res">
            <fileset dir="${frameworkRes.dir}">
                <include name="**/*" />
            </fileset>
        </copy>

        <copy toDir="${temp.dir}\res">
            <fileset dir="res">
                <include name="**/*" />
            </fileset>
        </copy>

        <!-- This replaces the package names for classes copied from under framework-directory to ${frame.prefix} -directory -->    
        <replace dir="${temp.dir}" value="${frame.prefix}">
            <include name="**/*.java"/>
            <replacetoken>com.whatever.frame</replacetoken>
        </replace>

        <rapc output="${cod.name}" srcdir="${temp.dir}" destdir="${build.dir}">
            <jdp title="${app.title}" 
                version="${app.version}" 
                vendor="Your Company"
                icon="../res/img/icon.png"
            />
        </rapc>
    </target>

    <target name="sign">
        <sigtool codfile="${build.dir}/${cod.name}.cod" />
    </target>

    <target name="clean">
        <delete dir="${build.dir}" />
    </target>

    <target name="load-simulator" depends="build">
        <copy todir="${simulator.home}">
            <fileset dir="${build.dir}" includes="*.cod,*.cso,*.debug,*.jad,*.jar" />
        </copy>
    </target>

</project>

これが行うことは、現在のプロジェクトからすべての Java ファイルとリソースをコピーし、次にフレームワーク プロジェクトから一時ディレクトリにコピーし、途中でフレームワーク ファイルのパッケージ名を置き換えます (別の場所に置かれるため)。名前付きディレクトリ)、これは、デバイスが同じパッケージの下に同じクラスを持つ複数のアプリケーションのインストールも拒否したという事実に関係しています(つまり、フレームワーククラス。あなたの場合、これは必要ないかもしれません)。コピーと置換が完了すると、アプリケーションは rapc を使用してターゲットのビルド ディレクトリにビルドされます。アプリの署名、クリーニング、およびシミュレーターへのロードには、個別のタスクがあります。お役に立てれば。

于 2012-05-17T11:31:30.943 に答える