这是我第三次尝试让ProGuard工作。
我的项目正在使用LibGDX,并使用Gradle构建。
我使用的唯一库是Kryonet 2.21
。
当我运行ProGuard时,我将生成的.jar添加为输入。 ProGuard自动添加 rt.jar
。
启用缩小和优化,禁用混淆(暂时)。
如果我点击进程,则输出中包含大量有关缺少类的垃圾邮件,例如:
Warning: com.badlogic.gdx.utils.GdxBuild: can't find referenced class com.badlogic.gdx.jnigen.BuildTarget
Warning: org.lwjgl.opengl.ContextGLES: can't find referenced class org.lwjgl.opengles.EGL
再往下,java.lang.String toString();
出现了问题:
Maybe this is library method 'java.nio.FloatBuffer { java.lang.String toString(); }'
(还有更多这种垃圾邮件)。
然后再做一些,比如Maybe this is program method 'org.lwjgl.openal.AL10 { void initNativeStubs(); }'
。
ProGuard向我提出以下错误:
我已经尝试了几个"工作" LibGDX的ProGuard配置,就像我在上一个问题中提到的那样:LibGDX proguard和https://github.com/libgdx/libgdx/wiki/ProGuard-DexGuard-and-libGDX。
如果有人能帮助我,我将永远感激不尽。
更新
我一直在尝试更多配置。这是我目前的一个:
-dontobfuscate
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-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
-keep class com.badlogic.gdx.controllers.android.AndroidControllers
-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.** { *; }
由于多个例外情况,操作失败:Uncaught translation error: com.android.dx.cf.code.SimException: local variable type mismatch: attempt to set or access a value of type float using a local variable of type int. This is symptomatic of .class transformation tools that ignore local variable information.
。