我正在使用 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);
}
}
提前致谢,汤姆
最佳答案
我在 ProGuard 上取得了巨大的成功,尽管我还没有在任何 JNA 项目中尝试过:
ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining classes, fields, and methods using short meaningless names. Finally, it preverifies the processed code for Java 6 or for Java Micro Edition.
可以完全禁用混淆,ProGuard 将扫描类文件依赖关系并忽略未使用的类(可以指定“始终保留的类”)。 ProGuard 也可以用于外部库,并用于构建仅包含“所需类”的单个 JAR。
关于java - 减少/缩小使用 JNA 的 Java 项目的 JAR 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10273002/