2012-04-22 38 views
1

我隐藏了一个使用JNA的特定窗口,它工作正常,但我需要缩小我的整个项目。我想JNA中有很多东西我不需要。 有没有一种方法/工具,以编程方式删除以下主要方法的情况下从未调用过的所有东西?我的项目中有所有的JNA类,不仅仅是常用的jar文件。减少/缩小使用JNA的Java Project的JAR大小?

import com.sun.jna.Native; 
import com.sun.jna.Pointer; 
import com.sun.jna.platform.win32.WinDef.HWND; 
import com.sun.jna.platform.win32.WinUser; 
import com.sun.jna.platform.win32.WinUser.WNDENUMPROC; 
import com.sun.jna.win32.StdCallLibrary; 

public class HideHwnd { 
    public interface User32 extends StdCallLibrary { 
     User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class); 
     boolean EnumWindows(WinUser.WNDENUMPROC lpEnumFunc, Pointer arg); 
     int GetWindowTextA(HWND hWnd, byte[] lpString, int nMaxCount); 
     boolean ShowWindow(HWND hWnd, int i); 
    } 

    public static void main(String[] args) { 
     final User32 user32 = User32.INSTANCE; 
     user32.EnumWindows(new WNDENUMPROC() { 
     public boolean callback(HWND hWnd, Pointer arg1) { 
      byte[] windowText = new byte[512]; 
      user32.GetWindowTextA(hWnd, windowText, 512); 
      String wText = Native.toString(windowText); 

      if (wText.isEmpty()) { 
       return true; 
      } 
      if (wText.startsWith("window1")){ 
       if (user32.ShowWindow(hWnd, 1)) 
        System.out.println(wText+" is hidden now!"); 
      } 
      return true; 
     } 
     }, null); 
    } 
} 

在此先感谢,汤姆

+0

你说的是缩小JAR的大小吗? – 2012-04-22 23:16:51

+0

最后,我猜是的 – Tom 2012-04-22 23:18:28

回答

4

我已经取得了巨大的成功与ProGuard,虽然我还没有与任何JNA项目试了一下:

的ProGuard是一个免费的Java 类文件收缩器,优化器,混淆器和预校验器。它检测并删除未使用的类,字段,方法和属性。它优化字节码并删除未使用的指令。它使用短无意义的名称重命名剩余的类,字段和方法。最后,它预先验证了Java 6或Java Micro Edition的处理代码。

模糊处理可以完全禁用,ProGuard将扫描类文件依赖关系并省略未使用的类(可以指定“总是保持类的类”)。 ProGuard 可以在外部库上使用,并且只用“所需类”构建单个JAR。

1

对于不打算支持的平台,您还可以安全地删除jna.jar中的任何原生libjnidispatch.so/.dll。