0

我使用我找到的清晰解释制作了一个跨平台 SWT jar:创建跨平台 Java SWT 应用程序

不过,这需要我打包每个平台的 jar 以使其独立于系统,使 jar 的总大小约为 40MB。对于进行一些解析的项目来说,这有点疯狂。

我曾尝试使用 ProGuard 来减小文件大小,但这并不是很有用。我可以由此得出结论,原则上不可能使用 SWT 创建小型跨平台应用程序吗?

4

2 回答 2

0

好吧,您可以让您的程序不包含 SWT jar,并在安装或首次运行时下载正确的 jar。可能不是一个好主意,但可能。否则,我只会在这种情况下使用 Swing。

于 2012-07-31T10:37:29.527 回答
0

可以将所有所需平台之间通用的类文件提取到单独的 jar 中。然后从平台特定的 jar 中删除这些公共类。

在运行时,您将公共 jar 和特定于平台的 jar 添加到 URLClassLoader。

为我工作。

这是我用来重新打包 jar 的旧 shell 脚本,我希望它可以工作:

#!/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 回答