Proguard和libgdx:RuntimeException

Proguard和libgdx:RuntimeException,libgdx,proguard,wallpaper,runtimeexception,Libgdx,Proguard,Wallpaper,Runtimeexception,我正在用libgdx开发一款android live墙纸,当我使用proguard时遇到了一个大问题。这是我的livewallpaper启动时出现的错误: 08-17 13:55:50.755: E/AndroidRuntime(28276): FATAL EXCEPTION: main 08-17 13:55:50.755: E/AndroidRuntime(28276): java.lang.RuntimeException: Couldn't construct AndroidInput,

我正在用libgdx开发一款android live墙纸,当我使用proguard时遇到了一个大问题。这是我的livewallpaper启动时出现的错误:

08-17 13:55:50.755: E/AndroidRuntime(28276): FATAL EXCEPTION: main
08-17 13:55:50.755: E/AndroidRuntime(28276): java.lang.RuntimeException: Couldn't construct AndroidInput, this should never happen
08-17 13:55:50.755: E/AndroidRuntime(28276):    at com.badlogic.gdx.backends.android.o.a(Unknown Source)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at com.badlogic.gdx.backends.android.q.a(Unknown Source)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at com.badlogic.gdx.backends.android.r.onCreate(Unknown Source)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at android.service.wallpaper.WallpaperService$Engine.attach(WallpaperService.java:777)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:1037)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:40)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at android.os.Looper.loop(Looper.java:137)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at android.app.ActivityThread.main(ActivityThread.java:5227)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at java.lang.reflect.Method.invokeNative(Native Method)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at java.lang.reflect.Method.invoke(Method.java:511)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at dalvik.system.NativeStart.main(Native Method)
08-17 13:55:50.755: E/AndroidRuntime(28276): Caused by: java.lang.NoSuchMethodException: <init> [interface com.badlogic.gdx.a, class android.content.Context, class java.lang.Object, class com.badlogic.gdx.backends.android.a]
08-17 13:55:50.755: E/AndroidRuntime(28276):    at java.lang.Class.getConstructorOrMethod(Class.java:460)
08-17 13:55:50.755: E/AndroidRuntime(28276):    at java.lang.Class.getConstructor(Class.java:431)
08-17 13:55:50.755: E/AndroidRuntime(28276): 
08-17 13:55:50.755:E/AndroidRuntime(28276):致命异常:main
08-17 13:55:50.755:E/AndroidRuntime(28276):java.lang.RuntimeException:无法构造AndroidPut,这永远不会发生
08-17 13:55:50.755:E/AndroidRuntime(28276):位于com.badlogic.gdx.backends.android.o.a(未知来源)
08-17 13:55:50.755:E/AndroidRuntime(28276):位于com.badlogic.gdx.backends.android.q.a(未知来源)
08-17 13:55:50.755:E/AndroidRuntime(28276):在com.badlogic.gdx.backends.android.r.onCreate(未知来源)
08-17 13:55:50.755:E/AndroidRuntime(28276):在android.service.wallpaper.wallperservice$Engine.attach(wallperservice.java:777)
08-17 13:55:50.755:E/AndroidRuntime(28276):在android.service.wallpaper.wallperservice$IWallpaperEngineWrapper.executeMessage(wallperservice.java:1037)
08-17 13:55:50.755:E/AndroidRuntime(28276):位于com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:40)
08-17 13:55:50.755:E/AndroidRuntime(28276):在android.os.Handler.dispatchMessage(Handler.java:99)上
08-17 13:55:50.755:E/AndroidRuntime(28276):在android.os.Looper.loop(Looper.java:137)
08-17 13:55:50.755:E/AndroidRuntime(28276):位于android.app.ActivityThread.main(ActivityThread.java:5227)
08-17 13:55:50.755:E/AndroidRuntime(28276):位于java.lang.reflect.Method.Invokenactive(本机方法)
08-17 13:55:50.755:E/AndroidRuntime(28276):位于java.lang.reflect.Method.invoke(Method.java:511)
08-17 13:55:50.755:E/AndroidRuntime(28276):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-17 13:55:50.755:E/AndroidRuntime(28276):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-17 13:55:50.755:E/AndroidRuntime(28276):在dalvik.system.NativeStart.main(本机方法)
08-17 13:55:50.755:E/AndroidRuntime(28276):由以下原因引起:java.lang.NoSuchMethodException:[interface com.badlogic.gdx.a,class android.content.Context,class java.lang.Object,class com.badlogic.gdx.backends.android.a]
08-17 13:55:50.755:E/AndroidRuntime(28276):在java.lang.Class.getConstructorOrMethod(Class.java:460)中
08-17 13:55:50.755:E/AndroidRuntime(28276):位于java.lang.Class.getConstructor(Class.java:431)
08-17 13:55:50.755:E/AndroidRuntime(28276):
这是我的proguard.cfg:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-dontwarn java.awt.**
-dontnote java.awt.**
-dontwarn com.badlogic.gdx.jnigen.**
-dontwarn com.moribitotech.mtx.**

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keep class com.bugsense.trace.models.** { *; }




 -keepclassmembers class **.MraidView$JavaScriptInterface 
 {
   *;
 }-keepclassmembers class **.SmartWallActivity$AppWall$JavaScriptInterface 
 {
   *;
 }

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-keepclasseswithmembers class **.R$** 
   {
    public static <fields>;
   }

   -keep class * extends android.view.View 
    { 

      public <init>(android.content.Context); 
      public <init>(android.content.Context, android.util.AttributeSet); 
      public <init>(android.content.Context, android.util.AttributeSet, int); 
      void set*(***);
       *** get*();
    }

   -keepclassmembers class * 
    {
        static final %                *;
        static final java.lang.String *;
    }


    -keepattributes SetJavaScriptEnabled
    -keepattributes JavascriptInterface
    -keepattributes InlinedApi

    -dontwarn com.bugsense.trace.models.**


-keep public class cmn.Proguard$KeepMembers 
-keep public class * implements cmn.Proguard$KeepMembers
-keepclassmembers class * implements cmn.Proguard$KeepMembers { 
   <methods>; 
}
-keepattributes *Annotation*
-dontwarn android.webkit.JavascriptInterface
-优化过程5
-dontusemixedcaseclassnames
-DontskipnonPublicLibraryClass
-不要翻转
-冗长的
-优化!代码/简化/算术,!字段/*,!类/合并/*
-dontwarn java.awt**
-不要忘记java.awt**
-dontwarn com.badlogic.gdx.jnigen**
-dontwarn com.moribitotech.mtx**
-keep public class*扩展android.app.Activity
-keep public class*扩展android.app.Application
-keep public class*扩展了android.app.Service
-keep public class*扩展了android.content.BroadcastReceiver
-keep public class*扩展了android.content.ContentProvider
-keep public class*扩展了android.app.backup.BackupAgentHelper
-keep public class*扩展了android.preference.preference
-保持公共类com.android.vending.licensing.ILicensingService
-保持类com.bugsense.trace.models.*{*;}
-keepclassmembers类**.MraidView$JavaScriptInterface
{
*;
}-keepclassmembers类**.SmartWallActivity$AppWall$JavaScriptInterface
{
*;
}
-KeepClassSwithMemberNames类*{
本地人;
}
-keepclassswithmembers类*{
public(android.content.Context、android.util.AttributeSet);
}
-keepclassswithmembers类*{
public(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembers类*扩展了android.app.Activity{
public void*(android.view.view);
}
-keepclassmembers枚举*{
公共静态**[]值();
公共静态**valueOf(java.lang.String);
}
-keep class*实现android.os.Parcelable{
公开静态最终android.os.Parcelable$Creator*;
}
-KeepClassSwithMembers类**.R$**
{
公共静态;
}
-keep class*扩展了android.view.view
{ 
public(android.content.Context);
public(android.content.Context、android.util.AttributeSet);
public(android.content.Context,android.util.AttributeSet,int);
无效集*(***);
***得到*();
}
-keepclassmembers类*
{
静态最终%*;
静态final java.lang.String*;
}
-keepattributes SetJavaScriptEnabled
-keepattributes JavascriptInterface
-保持在线传播
-dontwarn com.bugsense.trace.models**
-保留公共类cmn.Proguard$KeepMembers
-keep public类*实现cmn.Proguard$KeepMembers
-keepclassmembers类*实现cmn.Proguard$KeepMembers{
; 
}
-keepattributes*注释*
-dontwarn android.webkit.JavascriptInterface

谢谢你的帮助

我对AndroidPut类的混淆也有类似的问题。使用以下各项就足够了:

-keepnames class com.badlogic.gdx.backends.android.AndroidInput*
-keepclassmembers class com.badlogic.gdx.backends.android.AndroidInput* {<init>(...);}

这在libgdx的问题跟踪器中被记录和回答:

我在使用libgdx设置Proguard时遇到了问题,最后出现在这个方便的堆栈溢出帖子上。问题是,尽管它解决了最初的问题,但它留下了另一个更令人困惑的问题:“找不到方法:[……]/badlogic/gdx/physics/box2d/World;.beginContact:(J)V”

通过谷歌搜索,我终于找到了这篇文章:

建议使用以下设置:

-dontwarn com.badlogic.gdx.jnigen.**
-dontwarn com.badlogic.gdx.backends.**

-keep class com.badlogic.gdx.**
-keepclasseswithmembers class * implements com.badlogic.gdx.physics.box2d {
  *;
}
-keepclasseswithmembers class com.badlogic.gdx.physics.box2d {
   *;
}
-keepclasseswithmembers class com.badlogic.gdx.physics.box2d.World {
   *;
}
@stormont的第一个设置和posts设置的组合修复了我的LibGdx问题和无法识别的方法。之后,应用程序在移动设备上运行良好


希望它能帮助任何人。

即使proguard关闭,我的应用程序仍会抛出此错误

下面是我的工作

创建一个新的libgdx项目,你可以保留相同的包和文件夹名称,这样你就可以从旧项目复制到它们中
-dontwarn com.badlogic.gdx.jnigen.**
-dontwarn com.badlogic.gdx.backends.**

-keep class com.badlogic.gdx.**
-keepclasseswithmembers class * implements com.badlogic.gdx.physics.box2d {
  *;
}
-keepclasseswithmembers class com.badlogic.gdx.physics.box2d {
   *;
}
-keepclasseswithmembers class com.badlogic.gdx.physics.box2d.World {
   *;
}