Java ProGuard SimException

Java ProGuard SimException,java,android,libgdx,proguard,Java,Android,Libgdx,Proguard,我正在尝试让ProGuard开始工作,经过大约4个小时的随机尝试,尝试让这个神奇的软件开始工作 我的项目使用LibGDX和KryoNet。这是我当前的ProGuard配置: -verbose -dontobfuscate -dontwarn android.support.** -dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication -dontwarn com.badlogic.gdx.utils.GdxBu

我正在尝试让ProGuard开始工作,经过大约4个小时的随机尝试,尝试让这个神奇的软件开始工作

我的项目使用LibGDX和KryoNet。这是我当前的ProGuard配置:

-verbose
-dontobfuscate

-dontwarn android.support.**
-dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication
-dontwarn com.badlogic.gdx.utils.GdxBuild
-dontwarn com.badlogic.gdx.jnigen.BuildTarget*
-dontwarn com.badlogic.gdx.graphics.g2d.freetype.FreetypeBuild

-keepclassmembers class com.badlogic.gdx.backends.android.AndroidInput* {
   <init>(com.badlogic.gdx.Application, android.content.Context, java.lang.Object, com.badlogic.gdx.backends.android.AndroidApplicationConfiguration);
}

# Kryo
-dontwarn sun.reflect.**
-dontwarn java.beans.**
-dontwarn sun.nio.ch.**
-dontwarn sun.misc.**

-keep class com.esotericsoftware.kryo.** {*;}
-keep class com.esotericsoftware.** {*;}

-keep class java.beans.** { *; }
-keep class sun.reflect.** { *; }
-keep class sun.nio.ch.** { *; }
-详细
-顿托夫斯卡特
-dontwarn android.support**
-dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication
-dontwarn com.badlogic.gdx.utils.GdxBuild
-dontwarn com.badlogic.gdx.jnigen.BuildTarget*
-dontwarn com.badlogic.gdx.graphics.g2d.freetype.FreetypeBuild
-keepclassmembers类com.badlogic.gdx.backends.android.AndroidPut*{
(com.badlogic.gdx.Application、android.content.Context、java.lang.Object、com.badlogic.gdx.backends.android.android应用程序配置);
}
#克鲁约
-dontwarn太阳反射**
-dontwarn java.bean**
-dontwarn sun.nio.ch**
-dontwarn sun.misc**
-保持类com.esotericsoftware.kryo.*{*;}
-keep类com.estericsoftware.*{*;}
-保持类java.beans.*{*;}
-保持课堂阳光。反射。**{*;}
-保持类sun.nio.ch.*{*;}
这是不可编译的。它引发以下多个错误:
Uncaught translation error:com.android.dx.cf.code.SimException:局部变量类型不匹配:尝试使用int类型的局部变量设置或访问float类型的值。这是忽略局部变量信息的.class转换工具的症状。

我找到了有关此错误的一些信息:

给出的解决方案是从ANT编辑一些main-rules.xml文件,但我使用的是Gradle。发布了一条带有Gradle修复程序的评论:添加
project.tasks.withType(com.android.build.Gradle.tasks.Dex){additionalParameters=['--no locals']}
。但是显然Dex类被删除了,所以这不再有效

我读到这是ProGuard中的一个bug,模糊处理应该可以修复它。但是当我删除
-dontobfuscate
行时,我的应用程序不再启动:
java.lang.unsatifiedlinkerror:void com.a.a.a.c.a.k.g()找不到实现(尝试了java\u com\u a\u a\u c\u a\u k\u g和java\u com\u a\u c\u a\u k\u g)


有人知道如何解决这些问题吗?

这个问题可能与ProGuard的特定优化有关。 您可以这样禁用它:

-optimizations !code/allocation/variable
此外,您还可以删除LocalVariableTable和LocalVariableTypeTable属性,这些属性似乎没有正确更新(并且在应用程序中不再需要)。为此,您需要启用模糊处理,然后使用以下内容:

-keepattributes !LocalVariable*,**
此规则将保留除LocalVariable相关属性之外的所有属性

libGDX的混淆问题可以通过以下规则解决:

# Keep names - Native method names. Keep all native class/method names.
-keepclasseswithmembers,includedescriptorclasses class * {
    native <methods>;
}
#保留名称-本机方法名称。保留所有本机类/方法名称。
-保留类成员,包括描述类*{
本地人;
}

使用添加项时,编译成功,但应用程序在一段时间后崩溃:NullPointerException:尝试调用空对象引用上的虚拟方法'com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle com.badlogic.gdx.scenes.scene2d.ui.Label.getStyle()'。这很可能是由混淆引起的(还是我完全错了?)