簡體   English   中英

Java 混淆 - 使用 proguard

[英]Java Obfuscation - with proguard

我正在使用 oshi 在我的應用程序中創建唯一鍵。 我從項目中創建了一個帶有 maven 陰影插件的胖 jar。 胖 jar 工作正常,沒有混淆。 但是,如果我使用 ProGuard 混淆 jar,則 jar 在嘗試運行時會引發以下錯誤。

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.sun.a.H.h()Ljava/lang/String;
    at com.sun.a.H.h(Native Method)
    at com.sun.a.H.<clinit>(Unknown Source)
    at com.sun.a.ab.setAlignType(Unknown Source)
    at com.sun.a.ab.<init>(Unknown Source)
    at com.sun.a.ab.<init>(Unknown Source)
    at com.sun.a.ab.<init>(Unknown Source)
    at com.sun.a.ab.<init>(Unknown Source)
    at com.sun.a.b.d.aJ.<init>(Unknown Source)
    at com.sun.a.b.d.X.a(Unknown Source)
    at oshi.hardware.platform.windows.WindowsCentralProcessor.initProcessorCounts(Unknown Source)
    at oshi.hardware.common.AbstractCentralProcessor.<init>(Unknown Source)
    at oshi.hardware.platform.windows.WindowsCentralProcessor.<init>(Unknown Source)
    at oshi.hardware.platform.windows.WindowsHardwareAbstractionLayer.createProcessor(Unknown Source)
    at oshi.util.Memoizer$1.get(Unknown Source)
    at oshi.hardware.common.AbstractHardwareAbstractionLayer.getProcessor(Unknown Source)
    at com.pegado.qpguard.f.d.a(Unknown Source)
    at com.pegado.qpguard.d.b.<clinit>(Unknown Source)
    at com.pegado.qpguard.editor.Application.main(Unknown Source)

所以我創建了一個 proguard.confile 來管理混淆規則。

-keep public class com.acme.qpguard.editor.Application { *; }
-keep class org.apache.log4j.** { *; }
-keep class oshi.hardware.** { *; }
-keep class oshi.util.** { *; }
-keep class oshi.software.** { *; }
-keep class oshi.SystemInfo { *; }

但這對我沒有幫助。 jar 仍然拋出 java.lang.UnsatisfiedLinkError,由 oshi 引起。 期待解決這個問題的指針。 提前致謝。

我已將我的 proguard.conf 修改為:

-dontskipnonpubliclibraryclassmembers
-keepdirectories
-target 1.8
-forceprocessing
-dontoptimize
-allowaccessmodification
#-overloadaggressively
#-keeppackagenames org.**
-keepattributes *Annotation*
-verbose
-keep public class com.acme.qpguard.editor.Application { *; }
-keep class org.apache.logging.log4j.** { *; }
-keepattributes Signature,Annotation
-keep class org.sqlite.** { *; }
-keep class com.sun.** { *; }
-keep class com.google.** { *; }
-keep class oshi.** { *; }
-keep class com.acme.qpguard.logger.LoggerConstants { *; }
-keepclassmembers class com.acme.qpguard.logger.QPLogger {
    QPLogger commonLoggerInstance;
}
-keep class com.acme.qpguard.logger.QPLogger { *; }
#
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepattributes SourceFile,LineNumberTable
-dontwarn

# absolutely must keep this commented out for production
# -keepattributes SourceFile,LineNumberTable

這可能需要進一步優化甚至更正,但暫時對我有用。 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM