减少/缩小使用JNA的Java项目的JAR大小?

减少/缩小使用JNA的Java项目的JAR大小?,java,jna,Java,Jna,我正在使用JNA隐藏一个特定的窗口,它工作得很好,但我需要缩小我的整个项目。我想JNA中有很多我不需要的东西。 有没有一种方法/工具可以通过编程删除以下主方法中从未调用过的所有内容?我的项目中包含了所有JNA类,而不仅仅是普通jar文件 import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.w

我正在使用JNA隐藏一个特定的窗口,它工作得很好,但我需要缩小我的整个项目。我想JNA中有很多我不需要的东西。 有没有一种方法/工具可以通过编程删除以下主方法中从未调用过的所有内容?我的项目中包含了所有JNA类,而不仅仅是普通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);
   }
}

提前感谢Tom,虽然我没有在任何JNA项目中尝试过,但我在以下方面取得了巨大成功:

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


模糊处理可以完全禁用,ProGuard将扫描类文件依赖项并忽略未使用的类(“可以指定要始终保留的类”)。ProGuard也可用于外部库,并用于构建仅包含“必需类”的单个JAR。

我在这方面取得了巨大成功,尽管我没有在任何JNA项目中尝试过:

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


模糊处理可以完全禁用,ProGuard将扫描类文件依赖项并忽略未使用的类(“可以指定要始终保留的类”)。ProGuard也可以用于外部库,并用于构建一个只包含“必需类”的JAR.

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

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

您是在谈论缩小jar的大小吗?您是在谈论缩小你的罐子有多大?