我已經使用了明確的解釋,我發現一個跨平臺的SWT JAR減少SWT:Create cross platform Java SWT Application跨平臺的罐子大小
不過,這需要我收拾每一個平臺的罐子,以使其系統獨立,使得jar的總大小約爲40MB。對於執行一些解析的項目,這有點瘋狂。
我曾嘗試使用ProGuard來縮小文件大小,但這並不是非常有用。我可以從中得出結論:原則上使用SWT創建小型跨平臺應用程序是不可能的?
我已經使用了明確的解釋,我發現一個跨平臺的SWT JAR減少SWT:Create cross platform Java SWT Application跨平臺的罐子大小
不過,這需要我收拾每一個平臺的罐子,以使其系統獨立,使得jar的總大小約爲40MB。對於執行一些解析的項目,這有點瘋狂。
我曾嘗試使用ProGuard來縮小文件大小,但這並不是非常有用。我可以從中得出結論:原則上使用SWT創建小型跨平臺應用程序是不可能的?
那麼,你可以讓你的程序在安裝或第一次運行時不包含SWT jar並下載正確的程序。可能不是一個好主意,但可能。否則,我只是在這種情況下使用Swing。
謝謝,但使用Swing相當困難,因爲我的整個項目都是使用SWT製作的。 。現在我可以將軟件包縮小到10 MB左右,因爲SWT包含了許多我不需要的軟件包。不過,我認爲這太大了:-) – marczoid 2012-08-01 08:17:26
可以將所有需要的平臺之間通用的類文件提取到單獨的jar中。然後從平臺特定的jar中移除這些常見的類。
在運行時,您將通用jar和特定於平臺的jar添加到URLClassLoader。
適合我。
這是一個古老的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版本是:
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做點擊式運行方式的SWT應用程序是非常棘手的(-XstartOnFirstThread選項問題)。所以你可能會考慮刪除MacOS平臺。
http://mobilepit.com/10/j2me-how-to-optimise-your-jar-file-size.html – TheZ 2012-07-30 18:14:40