1

我正在使用 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);
   }
}

在此先感谢,汤姆

4

2 回答 2

4

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

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

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

于 2012-04-22T23:19:53.413 回答
1

You can also safely eliminate any native libjnidispatch.so/.dll within jna.jar for platforms you don't intend to support.

于 2012-04-24T18:35:18.160 回答