我試圖讓ProGuard工作,經過大約4小時的隨機嘗試,嘗試讓這個驚人的軟件工作。ProGuard SimException
我的項目使用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.** { *; }
這不會編譯。它會拋出以下錯誤的多個: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.
我發現一些關於此錯誤的信息:Compile with Proguard gives SimException: "local variable type mismatch"。
給出的解決方案是從ANT編輯一些main-rules.xml文件,但我使用Gradle。評論發佈了修復Gradle:添加project.tasks.withType(com.android.build.gradle.tasks.Dex) { additionalParameters=['--no-locals'] }
。但顯然Dex類被刪除,所以這不再起作用。
我讀到這是ProGuard中的一個錯誤,而混淆應該修復它。但是當我刪除-dontobfuscate
行時,我的應用程序不再啓動:java.lang.UnsatisfiedLinkError: No implementation found for void com.a.a.c.a.k.g() (tried Java_com_a_a_c_a_k_g and Java_com_a_a_c_a_k_g__)
。
有誰知道如何解決這些問題?
當使用添加劑,編譯成功,但經過一段時間的應用程序崩潰:NullPointerException異常:試圖調用虛擬方法com.badlogic
與libGDX混淆問題可能是由於此規則來解決.gdx.scenes.scene2d.ui.Label $ LabelStyle com.badlogic.gdx.scenes.scene2d.ui.Label.getStyle()'null對象引用 – kwantuM
這很可能是由混淆造成的(或者我完全錯了嗎? ) – kwantuM
沒關係,讓它工作! – kwantuM