首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java混淆-使用proguard

Java混淆-使用proguard
EN

Stack Overflow用户
提问于 2021-05-21 01:44:28
回答 1查看 62关注 0票数 0

我使用oshi在我的应用程序中创建一个唯一的密钥。我已经从项目中创建了一个带有maven shaded插件的胖jar。fat jar在没有混淆的情况下工作正常。但是,如果我使用ProGuard对jar进行模糊处理,jar在尝试运行时会抛出以下错误。

代码语言:javascript
复制
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来管理混淆规则。

代码语言:javascript
复制
-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引起的。期待着解决这个问题的指针。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-21 02:21:36

我已经将我的proguard.conf修改为:

代码语言:javascript
复制
-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

这可能需要进一步的优化,甚至需要修正,但目前对我来说是有效的。谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67625514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档