5

Blackberry Java 開発者がプロ​​ジェクトにインポートできるライブラリ プロジェクトに取り組んでいます。コード署名が必要な保護された RIM API を使用しています。しかし、Jar をインポートして単純な helloWorld アプリを操作することはできません。Eclipse プラグイン Blackberry-JDE を使用しています。

編集:解決策が見つかりました....

解決策を見つけたので、試したことを削除し、解決策だけを残しました...

SDK/Libary の構築 (Eclipse またはスタンドアロンで BB-ANT-TOOLS を使用) の
手順:


A) BB-ANT-TOOLS を使用して、SDK の jar を「ライブラリ」プロジェクトではなく「cldc」アプリケーションとしてビルドする必要がありました。これにより、上記の問題のほとんどが解決されました。

B) 次に、ANT タスクを追加して、ステップ A から得られた JAR を取得し、次のことを行います。

  • それを解凍し、
  • マニフェスト ファイルを編集して、"MicroEdition-Profile: MIDP-2.0" という行を削除します -- この行は、エクスポート用に jar をマークしようとするとエラーを引き起こします。
  • 次に、瓶を再圧縮しました。

注: 切り詰めた BB-ANT-TOOLS ant スクリプトを作成して、上記の 2 つの手順を実行する方法を示しました。スクリプトは以下に含まれています。

エンドユーザーとして、または独自のプロジェクトで SDK jar を使用する。
次に、jar を bb-eclipse に統合するには、次のようにします。

A) jar を BuildPath に追加する

B) [注文とエクスポート] タブの [Java ビルド パス] で、エクスポートする jar を選択します。これにより、rapc が jar を COD ファイルにビルドするため、最後に 1 つの COD しかありません。

ユーザーがこのプロジェクトをビルドすると、jar が最終的な cod ファイルに統合され、携帯電話や SIM に簡単に配信できるようになります。

<?xml version="1.0" encoding="UTF-8"?>
<project name="XXXXXMobileLib" default="full" basedir=".">
    <description>
  Description: Builds the BBLIB. Uses bb-ant-tools to build, sign and package for blackberry. 
    </description>

    <taskdef resource="bb-ant-defs.xml" classpath="BIN/BB_ANT_lib/bb-ant-tools.1.x.x.jar" />
    <property environment="env" />

    <!-- User defined Vars -->
    <property name="builderRoot" value="." />
    <property name="SIG_PASSWORD" value="XXXXXXXXX" />
    <property name="javaHome" value="${env.JAVA_HOME}" />
    <echo>${javaHome}</echo>
    <property name="jdehome" value="${env.BBJDE_HOME}\" />
    <property name="simulator" value="${jdehome}\simulator" />
    <property name="bin" value="${jdehome}\bin" />
    <property name="releaseBuildOut" value="${builderRoot}\release_out\" />
    <property name="srcBuildOut" value="${builderRoot}\srcBuild_out\" />
    <property name="JarFixTemp" value="${builderRoot}\.tempZip\" />
    <property name="buildVersion" value="${env.BUILD_VERSION}" />

    <property name="application_id" value="com.XXXXX.foo.bar.${buildVersion}" />
    <property name="application_name" value="XXXXX BBLIB v${buildVersion}" />
    <property name="application_desc" value="XXXXX BBLIB v${buildVersion}" />
    <property name="application_vendor" value="XXXXX" />
    <property name="applicaiton_filename" value="XXXXXBBLIB${buildVersion}" />
    <property name="applicaiton_srcs" value="${builderRoot}/src_in_location/" />
    <property name="zipOutName" value="XXXXX-${buildVersion}BBLIB.zip" />
    <property name="zipOutNameJavadocs" value="XXXXX-${buildVersion}BBLIBjavadoc.zip" />

    <property name="jde.home" location="${jdehome}" />

    <!-- 
    MAIN ENTRY TARGET. 
    -->
    <target name="full" depends="clean,javadoc,buildRIM,FixJarManifest,sign,distribute" />

    <target name="FixJarManifest">
        <tstamp/>
        <mkdir dir="${JarFixTemp}"/>
        <unzip src="${builderRoot}/release_out/${applicaiton_filename}.jar" dest="${JarFixTemp}"/>
        <delete dir="${builderRoot}/release_out/${applicaiton_filename}.jar"/>
        <!-- For some reason rapc puts this line into the manifest file, but it breaks the JDE plug-in when you try to
             set the jar for export.  Giving an error like this "Project {0} missing......" 
             To avoid having an empty line in the manifest, Im just injecting a new attribute BuildTime-->
        <replace file="${JarFixTemp}/META-INF/MANIFEST.MF" token="MicroEdition-Profile: MIDP-2.0" value="Build-Time: ${DSTAMP}-${TSTAMP}"/>
        <zip destfile="${builderRoot}/release_out/${applicaiton_filename}.jar"
            basedir="${JarFixTemp}"
        />
        <delete dir="${JarFixTemp}"/>
    </target>

    <!-- Cleanup any existing files in the outdir -->
    <target name="clean">
        <delete>
            <fileset dir="${releaseBuildOut}" includes="**" />
        </delete>
    </target>


    <!-- Generate the Javadocs -->
    <target name="javadoc">
        <javadoc access="public" destdir="${releaseBuildOut}/JavaDocs" author="true" version="true" use="true" defaultexcludes="yes" excludepackagenames="net.rim.*" windowtitle="FOO_BAR">
            <fileset dir="${applicaiton_srcs}/XXXXXMobileLib">
                <include name="src/**/*.java" />
            </fileset>
        </javadoc>
        <zip destfile="${releaseBuildOut}/${zipOutNameJavadocs}" basedir="${releaseBuildOut}/JavaDocs" />
        <delete dir="${releaseBuildOut}/JavaDocs"/>
    </target>

    <target name="buildRIM" description="Builds Project">
        <rapc jdehome="${jdehome}" jdkhome="${javaHome}" destdir="${releaseBuildOut}" output="${applicaiton_filename}" quiet="false">
            <!-- Building as a cldc applicaiton, so it can be packaged up with our final cod, as a single cod -->
            <jdp type="cldc" 
                 title="${application_desc}" 
                 vendor="${application_vendor}" 
                 version="${buildVersion}" 
                 description="${application_desc}" 
                 arguments="" 
                 systemmodule="false" 
                 runonstartup="false" 
                 startuptier="7" 
                 ribbonposition="0">
            </jdp>
            <src>
                <fileset dir="${applicaiton_srcs}/MobileLib">
                    <include name="src/**/*.java" />
                </fileset>
            </src>
        </rapc>
    </target>

    <target name="sign" depends="clean,buildRIM">
        <sigtool password="${SIG_PASSWORD}">
            <fileset dir="${releaseBuildOut}" includes="*.cod" />
        </sigtool>
        <echo>Contents of the signingtool's logfile: </echo>
        <echo file="LogFile.txt" />
    </target>

    <!-- build and distribute the jar -->
    <target name="distribute" depends="buildRIM" description="generate the distribution">
        <alx destdir="${releaseBuildOut}" filename="${applicaiton_filename}.alx">
            <application id="${application_id}" name="${application_name}">
                <codset>
                    <fileset dir="${releaseBuildOut}" includes="*.cod" />
                </codset>
            </application>
        </alx>

        <!-- Create release zip -->
        <delete file="${releaseBuildOut}/${zipOutName}" />
        <zip destfile="${releaseBuildOut}/${zipOutName}">
            <!-- zip up the BB jar and drop it for distribution -->
            <zipfileset dir="${releaseBuildOut}" includes="**/*.jar" />
        </zip>

        <move todir="${releaseBuildOut}/UNUSED_BUILD_OUTPUT_FILES/"><!-- move unwanted files, leaving the zip behind -->
            <fileset dir="${releaseBuildOut}">
                <include name="**/*.*"/>
                <exclude name="**/*.zip"/>
            </fileset>
        </move>
    </target>
</project>
4

1 に答える 1

1

手順 A と B を使用して「ライブラリ」を作成しました - ありがとう。Blackberry 用の最新の Eclipse プラグイン (1.3.0.201102031007-19) には、「Blackberry | Package Project」コマンドがあります。これを使用してjarファイルを作成しました(プロジェクトの「成果物」フォルダーに配置しました)。

次に、MIDP行を削除するように提案するようにマニフェストを変更しました(これは明らかに既知のバグです)。最後に、ライブラリをプロジェクトに追加してデプロイする手順に従いました。(ちなみに、これらはバナー/広告ライブラリを追加する手順と同じで、非常に簡単です。)

私も、bb-ant-tools を使用するスタンドアロン/外部ビルド スクリプト プロセスを使用しています。これに対応するために、最近「外部ライブラリ jar」機能を追加しました。しかし、Eclipse の新機能を使用すると、コマンドライン ビルド スクリプトを維持する必要があるかどうか疑問に思うようになりました。

私にとっての鍵は、あなたの指示に従って、ライブラリ プロジェクトのビルドを「Blackberry アプリケーション」(CDLC アプリなど) に切り替えることでした。「ライブラリ」として設定すると、その「内臓」エラーが発生しました。

ご投稿ありがとうございます。

于 2011-09-27T01:38:57.620 に答える