1

正常に動作する JNA を使用して特定のウィンドウを非表示にしていますが、プロジェクト全体を縮小する必要があります。JNAには必要のないものがたくさんあると思います。プログラムで次のメインメソッドの場合に呼び出されなかったすべてのものを削除する方法/ツールはありますか? 共通のjarファイルだけでなく、プロジェクト内にすべてのJNAクラスがあります。

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

また、サポートする予定のないプラットフォーム用の jna.jar 内のネイティブ libjnidispatch.so/.dll を安全に削除することもできます。

于 2012-04-24T18:35:18.160 に答える