2012-07-30 65 views
0

我已經使用了明確的解釋,我發現一個跨平臺的SWT JAR減少SWT:Create cross platform Java SWT Application跨平臺的罐子大小

不過,這需要我收拾每一個平臺的罐子,以使其系統獨立,使得jar的總大小約爲40MB。對於執行一些解析的項目,這有點瘋狂。

我曾嘗試使用ProGuard來縮小文件大小,但這並不是非常有用。我可以從中得出結論:原則上使用SWT創建小型跨平臺應用程序是不可能的?

+0

http://mobilepit.com/10/j2me-how-to-optimise-your-jar-file-size.html – TheZ 2012-07-30 18:14:40

回答

0

那麼,你可以讓你的程序在安裝或第一次運行時不包含SWT jar並下載正確的程序。可能不是一個好主意,但可能。否則,我只是在這種情況下使用Swing。

+1

謝謝,但使用Swing相當困難,因爲我的整個項目都是使用SWT製作的。 。現在我可以將軟件包縮小到10 MB左右,因爲SWT包含了許多我不需要的軟件包。不過,我認爲這太大了:-) – marczoid 2012-08-01 08:17:26

0

可以將所有需要的平臺之間通用的類文件提取到單獨的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平臺。