Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LibGdx [FATAL EXCEPTION] Loading a skin .json file

I'm using Intellij. Everything was working fine, and the APK is deployed in my Android but it just stays black screen and return to home saying that "'the game' stopped:

    1023-1051/? E/AndroidRuntime﹕ FATAL EXCEPTION: GLThread 1591
Process: net.mygdx.game.android, PID: 1023
com.badlogic.gdx.utils.ax: Error reading file: jsonSkin.json
        at com.badlogic.gdx.e.a.a.i.a(Unknown Source)
        at com.badlogic.gdx.e.a.a.i.<init>(Unknown Source)
        at net.mygdx.game.a.a(Unknown Source)
        at com.badlogic.gdx.backends.android.i.onSurfaceChanged(Unknown Source)
        at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1520)
        at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)
 Caused by: com.badlogic.gdx.utils.ax: Error reading file: skins/jsonSkin.json
        at com.badlogic.gdx.utils.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.<init>(Unknown Source)
            at org.mygdx.gam.a.a(Unknown Source)
            at com.badlogic.gdx.backends.android.i.onSurfaceChanged(Unknown Source)
            at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1520)
            at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)
 Caused by: com.badlogic.gdx.utils.ax:
        at com.badlogic.gdx.e.a.a.k.a(Unknown Source)
        at com.badlogic.gdx.e.a.a.k.b(Unknown Source)
        at com.badlogic.gdx.utils.k.a(Unknown Source)
        at com.badlogic.gdx.e.a.a.j.a(Unknown Source)
            at com.badlogic.gdx.utils.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.<init>(Unknown Source)
            at net.mygdx.game.a.a(Unknown Source)
            at com.badlogic.gdx.backends.android.i.onSurfaceChanged(Unknown Source)
            at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1520)
            at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)
 Caused by: com.badlogic.gdx.utils.b.e: Class not found: com.badlogic.gdx.graphics.g2d.BitmapFont
        at com.badlogic.gdx.utils.b.b.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.k.b(Unknown Source)
            at com.badlogic.gdx.utils.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.j.a(Unknown Source)
            at com.badlogic.gdx.utils.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.<init>(Unknown Source)
            at net.mygdx.game.a.a(Unknown Source)
            at com.badlogic.gdx.backends.android.i.onSurfaceChanged(Unknown Source)
            at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1520)
            at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)
 Caused by: java.lang.ClassNotFoundException: com.badlogic.gdx.graphics.g2d.BitmapFont
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:251)
        at java.lang.Class.forName(Class.java:216)
            at com.badlogic.gdx.utils.b.b.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.k.b(Unknown Source)
            at com.badlogic.gdx.utils.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.j.a(Unknown Source)
            at com.badlogic.gdx.utils.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.<init>(Unknown Source)
            at net.mygdx.game.a.a(Unknown Source)
            at com.badlogic.gdx.backends.android.i.onSurfaceChanged(Unknown Source)
            at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1520)
            at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)
 Caused by: java.lang.NoClassDefFoundError: com/badlogic/gdx/graphics/g2d/BitmapFont
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:251)
            at java.lang.Class.forName(Class.java:216)
            at com.badlogic.gdx.utils.b.b.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.k.b(Unknown Source)
            at com.badlogic.gdx.utils.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.j.a(Unknown Source)
            at com.badlogic.gdx.utils.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.<init>(Unknown Source)
            at org.mygdx.gam.a.a(Unknown Source)
            at com.badlogic.gdx.backends.android.i.onSurfaceChanged(Unknown Source)
            at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1520)
            at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.badlogic.gdx.graphics.g2d.BitmapFont" on path: DexPathList[[zip file "/data/app/org.mygdx.gam.android-1.apk"],nativeLibraryDirectories=[/data/app-lib/org.mygdx.gam.android-1, /vendor/lib, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:251)
            at java.lang.Class.forName(Class.java:216)
            at com.badlogic.gdx.utils.b.b.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.k.b(Unknown Source)
            at com.badlogic.gdx.utils.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.j.a(Unknown Source)
            at com.badlogic.gdx.utils.k.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.a(Unknown Source)
            at com.badlogic.gdx.e.a.a.i.<init>(Unknown Source)
            at org.mygdx.gam.a.a(Unknown Source)
            at com.badlogic.gdx.backends.android.i.onSurfaceChanged(Unknown Source)
            at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1520)
            at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)

This on is my .json file;

{
com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: default.fnt } },
com.badlogic.gdx.graphics.Color: {
    green: { a: 1, b: 0, g: 1, r: 0 },
    white: { a: 1, b: 1, g: 1, r: 1 },
    red: { a: 1, b: 0, g: 0, r: 1 },
    black: { a: 1, b: 0, g: 0, r: 0 },
},
com.badlogic.gdx.scenes.scene2d.ui.Skin$TintedDrawable: {
    dialogDim: { name: white, color: { r: 0, g: 0, b: 0, a: 0.45 } },
},
com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle: {
    default: { down: default-round-down, up: default-round },
    toggle: { down: default-round-down, checked: default-round-down, up: default-round }
},
com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
    default: { down: default-round-down, up: default-round, font: default-font, fontColor: white },
    toggle: { down: default-round-down, up: default-round, checked: default-round-down, font: default-font, fontColor: white, downFontColor: red }
},
com.badlogic.gdx.scenes.scene2d.ui.ScrollPane$ScrollPaneStyle: {
    default: { vScroll: default-scroll, hScrollKnob: default-round-large, background: default-rect, hScroll: default-scroll, vScrollKnob: default-round-large }
},
com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxStyle: {
    default: {
        font: default-font, fontColor: white, background: default-select,
        scrollStyle: default,
        listStyle: { font: default-font, selection: default-select-selection }
    }
},
com.badlogic.gdx.scenes.scene2d.ui.SplitPane$SplitPaneStyle: {
    default-vertical: { handle: default-splitpane-vertical },
    default-horizontal: { handle: default-splitpane }
},
com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {
    default: { titleFont: default-font, background: default-window, titleFontColor: white },
    dialog: { titleFont: default-font, background: default-window, titleFontColor: white, stageBackground: dialogDim }
},
com.badlogic.gdx.scenes.scene2d.ui.ProgressBar$ProgressBarStyle: {
    default-horizontal: { background: default-slider, knob: default-slider-knob },
    default-vertical: { background: default-slider, knob: default-round-large }
},
com.badlogic.gdx.scenes.scene2d.ui.Slider$SliderStyle: {
    default-horizontal: { background: default-slider, knob: default-slider-knob },
    default-vertical: { background: default-slider, knob: default-round-large }
},
com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: {
    default: { font: default-font, fontColor: white }
},
com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: {
    default: { selection: selection, background: textfield, font: default-font, fontColor: white, cursor: cursor }
},
com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle: {
    default: { checkboxOn: check-on, checkboxOff: check-off, font: default-font, fontColor: white }
},
com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: {
    default: { fontColorUnselected: white, selection: selection, fontColorSelected: white, font: default-font }
},
com.badlogic.gdx.scenes.scene2d.ui.Touchpad$TouchpadStyle: {
    default: { background: default-pane, knob: default-round-large }
},
com.badlogic.gdx.scenes.scene2d.ui.Tree$TreeStyle: {
    default: { minus: tree-minus, plus: tree-plus, selection: default-select-selection }
},
com.badlogic.gdx.scenes.scene2d.ui.TextTooltip$TextTooltipStyle: {
    default: {
        label: { font: default-font, fontColor: white },
        background: default-pane, wrapWidth: 150
    }
},
}

And these lines are the ones who are weird because if I get rid of them the program works just fine except from the button that Obviously doesn't appear;

skin = new Skin(Gdx.files.internal("jsonSkin.json"));
TextButton btnStart = new TextButton("Start!!", skin);
btnStart.setPosition(50f,400f);
btnStart.setSize(260f,60f);
mainMenu.addActor(btnStart);
like image 600
user5895975 Avatar asked Nov 15 '25 18:11

user5895975


1 Answers

Put this in your config:

 -keep class com.badlogic.**{
   **[] $VALUES;
    *;
}

It'll fix this issue, and issues with reflection.

EDIT :

Above is the top level rule that disables all of ProGuard’s goodness on particular package. No shrinking, no obfuscation; not for classes, not for members.

Proguard obfuscate classes that we're using in our skin file, Skin loads classes by reflection, so we must not allow Proguard to change the names of those classes.

  1. double-asterisk in the package means every class under every package under that top-level package;
  2. asterisk inside the curly braces applies to every member (variables, methods, and constants) inside those class.
like image 72
Abhishek Aryan Avatar answered Nov 17 '25 09:11

Abhishek Aryan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!