昨年も同様の問題がありました。複数の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 を使用してターゲットのビルド ディレクトリにビルドされます。アプリの署名、クリーニング、およびシミュレーターへのロードには、個別のタスクがあります。お役に立てれば。