0

クロスプラットフォームのJavaSWTアプリケーションの作成に関する明確な説明を使用して、クロスプラットフォームのSWTjarを作成しました。

それでも、システムに依存しないようにするために、すべてのプラットフォームのjarをパックする必要があり、jarの合計サイズは約40MBになります。これは、解析を行うプロジェクトにとってはややクレイジーです。

ProGuardを使用してファイルサイズを縮小しようとしましたが、これはあまり役に立ちませんでした。このことから、SWTを使用して小さなクロスプラットフォームアプリケーションを作成することは原則として不可能であると結論付けることができますか?

4

2 に答える 2

0

必要なすべてのプラットフォーム間で共通のクラス ファイルを個別の jar に抽出することができます。次に、これらの共通クラスをプラットフォーム固有の jar から削除します。

実行時に、共通の jar とプラットフォーム固有の jar の両方を URLClassLoader に追加します。

私のために働きます。

これは、jar を再パックするために使用した古いシェル スクリプトです。うまくいくことを願っています。

#!/bin/bash

ref=""
for jar in *.jar ; do
    base="${jar%%.jar}"
    mkdir "$base"
    ( cd "$base" ; unzip -o ../${jar} ;)
    ref="$base"
done

mkdir common
echo "Base is ${ref}"

( cd "$ref" ; find . -type f ) | while read f ; do
    fd5=`cat "${ref}/${f}" | md5sum`
    echo "Processing ${f}..."
    same="yes"
    for jar in *.jar ; do
        if [[ "x${same}" == "xyes" ]] ; then
            base="${jar%%.jar}"
            if [[ -f "${base}/${f}" ]] ; then
                fd5b=`cat "${base}/${f}" | md5sum `
                if [[ "x${fd5}" == "x${fd5b}" ]] ; then
                    echo " - same ${fd5} == ${fd5b} in ${base}"
                else
                    echo " - different ${fd5} != ${fd5b} in ${base}"
                    same="no"
                fi
            else
                echo " - missing in ${base}"
                same="no"
            fi
        fi
    done
    if [[ "x${same}" == "xyes" ]] ; then
        echo " - IDENTICAL"
        d=`dirname "${f}"`
        mkdir -p "common/${d}"
        cp "${ref}/${f}" "common/${f}"
        for jar in *.jar ; do
            base="${jar%%.jar}"
            rm "${base}/${f}"
        done
    else
        echo " - DIFFERENT"
    fi
done

mkdir jars
( cd "common" ; jar -cvf "../jars/common.jar" * ; )
for jar in *.jar ; do
    base="${jar%%.jar}"
    ( cd "$base" ; jar -cvfm "../jars/${jar}" META-INF/MANIFEST.MF * ; )
done

SWT バージョン 4.3 の結果の jar サイズは次のとおりです。

swt_common.jar 521865
swt_linux_x64.jar 1373413
swt_linux_x86.jar 1222447
swt_macosx_x64.jar 1416943
swt_macosx_x86.jar 1514651
swt_win32_x64.jar 1434927
swt_win32_x86.jar 1421738

また、MacOS 用の click-jar-to-run スタイルの SWT アプリケーションを実行するのは注意が必要です (-XstartOnFirstThread オプションの問題)。そのため、MacOS プラットフォームの削除を検討するかもしれません。

于 2015-08-13T10:48:54.287 に答える
0

プログラムに SWT jar を含めないようにして、インストール時または最初の実行時に正しいものをダウンロードすることができます。おそらく良い考えではありませんが、可能です。それ以外の場合は、この状況で Swing を使用します。

于 2012-07-31T10:37:29.527 に答える