Failed to link lighting shaders on Android

I seem to have the same issue, however it’s not really possible for me to work on a real device all the time. I kind of need emulators to test compatibility.

Using the lighting material at all causes the issue, even if you don’t set any additional parameters.

 terrainMaterial = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
terrainMaterial.setColor("Diffuse", new ColorRGBA(96f / 255, 128f / 255, 56f / 255, 1.0f));
terrainMaterial.setBoolean("UseMaterialColors", true);

results in the following output:


01/18 10:39:16: Launching app
$ adb install-multiple -r -t -p com.jayfella.motorunner D:\Programming\games\MotoRunner\app\build\outputs\apk\debug\app-debug.apk 
Split APKs installed
$ adb shell am start -n "com.jayfella.motorunner/com.jayfella.motorunner.JmeHarness" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D
Waiting for application to come online: com.jayfella.motorunner | com.jayfella.motorunner.test
Waiting for application to come online: com.jayfella.motorunner | com.jayfella.motorunner.test
Connecting to com.jayfella.motorunner
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
W/ActivityThread: Application com.jayfella.motorunner is waiting for the debugger on port 8100...
I/System.out: Sending WAIT chunk
I/zygote: Debugger is active
Connected to the target VM, address: 'localhost:8639', transport: 'socket'
I/System.out: Debugger has connected
I/System.out: waiting for debugger to settle...
I/System.out: waiting for debugger to settle...
I/chatty: uid=10079(com.jayfella.motorunner) identical 4 lines
I/System.out: waiting for debugger to settle...
I/System.out: debugger has settled (1414)
I/InstantRun: starting instant run server: is main process
D/AndroidHarness: Resolution from Window, width:2560, height: 1504
I/zygote: Do partial code cache collection, code=29KB, data=18KB
I/zygote: After code cache collection, code=20KB, data=15KB
I/zygote: Increasing code cache capacity to 128KB
I/com.jme3.system.JmeSystem: INFO Running on jMonkeyEngine 3.2-stable
                              * Branch: HEAD
                              * Git Hash: 95d33e6
                              * Build Date: 2018-01-05
I/com.jme3.system.android.OGLESContext: INFO Android Build Version: 27
I/zygote: Do partial code cache collection, code=60KB, data=36KB
I/zygote: After code cache collection, code=56KB, data=35KB
I/zygote: Increasing code cache capacity to 256KB
D/OpenGLRenderer: HWUI GL Pipeline

                  [ 01-18 10:39:19.930 11251:11270 D/         ]
                  HostConnection::get() New Host Connection established 0xa967ef40, tid 11270
I/zygote: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Swap behavior 1
W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
D/OpenGLRenderer: Swap behavior 0

                  [ 01-18 10:39:19.940 11251:11269 D/         ]
                  HostConnection::get() New Host Connection established 0xa96753c0, tid 11269
D/EGL_emulation: eglCreateContext: 0xa9905540: maj 2 min 0 rcv 2
D/EGL_emulation: eglMakeCurrent: 0xa9905540: ver 2 0 (tinfo 0xa99030c0)
D/EGL_emulation: eglCreateContext: 0x99d8e0e0: maj 2 min 0 rcv 2
D/EGL_emulation: eglMakeCurrent: 0x99d8e0e0: ver 2 0 (tinfo 0xb153b380)
D/EGL_emulation: eglMakeCurrent: 0xa9905540: ver 2 0 (tinfo 0xa99030c0)
E/emuglGLESv2_enc: device/generic/goldfish-opengl/system/GLESv2_enc/GL2Encoder.cpp:s_glGetIntegerv:749 GL error 0x500
I/com.jme3.renderer.opengl.GLRenderer: INFO OpenGL Renderer Information
                                        * Vendor: Google (ATI Technologies Inc.)
                                        * Renderer: Android Emulator OpenGL ES Translator (AMD Radeon HD 7900 Series)
                                        * OpenGL Version: OpenGL ES 2.0 (4.5.13506 Core Profile Context 23.20.15007.1005)
                                        * GLSL Version: OpenGL ES GLSL ES 1.0.17
                                        * Profile: Compatibility
W/com.jme3.asset.AssetConfig: WARNING Cannot find loader com.jme3.cursors.plugins.CursorLoader
W/com.jme3.asset.AssetConfig: WARNING Cannot find loader com.jme3.scene.plugins.blender.BlenderModelLoader
I/com.jme3.input.android.AndroidJoyInput: INFO loading joysticks for com.jme3.input.android.AndroidJoyInput14
I/com.jme3.input.android.AndroidJoystickJoyInput14: INFO loading Joystick devices


                                                    [ 01-18 10:39:20.263 11251:11269 D/         ]
                                                    PlayerBase::PlayerBase()

                                                    [ 01-18 10:39:20.263 11251:11269 D/         ]
                                                    TrackPlayerBase::TrackPlayerBase()
I/libOpenSLES: Emulating old channel mask behavior (ignoring positional mask 0x3, using default mask 0x3 based on channel count of 2)
W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied, rates do not match 44100 Hz, require 48000 Hz
D/AudioTrack: Client defaulted notificationFrames to 708 for frameCount 2124
I/com.jme3.audio.openal.ALAudioRenderer: INFO Audio Renderer Information
                                          * Device: OpenAL Soft
                                          * Vendor: OpenAL Community
                                          * Renderer: OpenAL Soft
                                          * Version: 1.1 ALSOFT 1.16.0
                                          * Supported channels: 64
                                          * ALC extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_DEDICATED ALC_EXT_disconnect ALC_EXT_EFX ALC_EXT_thread_local_context ALC_SOFTX_device_clock ALC_SOFTX_HRTF ALC_SOFT_loopback ALC_SOFTX_midi_interface ALC_SOFT_pause_device
                                          * AL extensions: AL_EXT_ALAW AL_EXT_BFORMAT AL_EXT_DOUBLE AL_EXT_EXPONENT_DISTANCE AL_EXT_FLOAT32 AL_EXT_IMA4 AL_EXT_LINEAR_DISTANCE AL_EXT_MCFORMATS AL_EXT_MULAW AL_EXT_MULAW_BFORMAT AL_EXT_MULAW_MCFORMATS AL_EXT_OFFSET AL_EXT_source_distance_model AL_LOKI_quadriphonic AL_SOFT_block_alignment AL_SOFT_buffer_samples AL_SOFT_buffer_sub_data AL_SOFT_deferred_updates AL_SOFT_direct_channels AL_SOFT_loop_points AL_SOFT_MSADPCM AL_SOFT_source_latency AL_SOFT_source_length
I/com.jme3.audio.openal.ALAudioRenderer: INFO Audio effect extension version: 1.0
I/com.jme3.audio.openal.ALAudioRenderer: INFO Audio max auxiliary sends: 4
W/System.err: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
W/System.err: SLF4J: Defaulting to no-operation (NOP) logger implementation
W/System.err: SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
I/zygote: Do full code cache collection, code=111KB, data=77KB
I/zygote: After code cache collection, code=87KB, data=55KB
E/AndroidRuntime: FATAL EXCEPTION: GLThread 905
                  Process: com.jayfella.motorunner, PID: 11251
                  com.jme3.renderer.RendererException: Shader failed to link, shader:Shader[numSources=2, numUniforms=14, shaderSources=[ShaderSource[name=Common/MatDefs/Light/Lighting.frag, defines, type=Fragment, language=GLSL100], ShaderSource[name=Common/MatDefs/Light/Lighting.vert, defines, type=Vertex, language=GLSL100]]]
                  Error: uniform m_Shininess specified with different precision in different shaders.

                      at com.jme3.renderer.opengl.GLRenderer.updateShaderData(GLRenderer.java:1348)
                      at com.jme3.renderer.opengl.GLRenderer.setShader(GLRenderer.java:1360)
                      at com.jme3.material.logic.MultiPassLightingLogic.render(MultiPassLightingLogic.java:166)
                      at com.jme3.material.Technique.render(Technique.java:166)
                      at com.jme3.material.Material.render(Material.java:974)
                      at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java:614)
                      at com.jme3.renderer.queue.RenderQueue.renderGeometryList(RenderQueue.java:266)
                      at com.jme3.renderer.queue.RenderQueue.renderQueue(RenderQueue.java:305)
                      at com.jme3.renderer.RenderManager.renderViewPortQueues(RenderManager.java:877)
                      at com.jme3.renderer.RenderManager.flushQueue(RenderManager.java:779)
                      at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1108)
                      at com.jme3.renderer.RenderManager.render(RenderManager.java:1158)
                      at com.jme3.app.SimpleApplication.update(SimpleApplication.java:253)
                      at com.jme3.app.AndroidHarness.update(AndroidHarness.java:497)
                      at com.jme3.system.android.OGLESContext.onDrawFrame(OGLESContext.java:342)
                      at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1571)
                      at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1270)
E/com.jme3.app.AndroidHarness: SEVERE Exception thrown in Thread[GLThread 905,5,main]
                               com.jme3.renderer.RendererException: Shader failed to link, shader:Shader[numSources=2, numUniforms=14, shaderSources=[ShaderSource[name=Common/MatDefs/Light/Lighting.frag, defines, type=Fragment, language=GLSL100], ShaderSource[name=Common/MatDefs/Light/Lighting.vert, defines, type=Vertex, language=GLSL100]]]
                               Error: uniform m_Shininess specified with different precision in different shaders.

                                   at com.jme3.renderer.opengl.GLRenderer.updateShaderData(GLRenderer.java:1348)
                                   at com.jme3.renderer.opengl.GLRenderer.setShader(GLRenderer.java:1360)
                                   at com.jme3.material.logic.MultiPassLightingLogic.render(MultiPassLightingLogic.java:166)
                                   at com.jme3.material.Technique.render(Technique.java:166)
                                   at com.jme3.material.Material.render(Material.java:974)
                                   at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java:614)
                                   at com.jme3.renderer.queue.RenderQueue.renderGeometryList(RenderQueue.java:266)
                                   at com.jme3.renderer.queue.RenderQueue.renderQueue(RenderQueue.java:305)
                                   at com.jme3.renderer.RenderManager.renderViewPortQueues(RenderManager.java:877)
                                   at com.jme3.renderer.RenderManager.flushQueue(RenderManager.java:779)
                                   at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1108)
                                   at com.jme3.renderer.RenderManager.render(RenderManager.java:1158)
                                   at com.jme3.app.SimpleApplication.update(SimpleApplication.java:253)
                                   at com.jme3.app.AndroidHarness.update(AndroidHarness.java:497)
                                   at com.jme3.system.android.OGLESContext.onDrawFrame(OGLESContext.java:342)
                                   at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1571)
                                   at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1270)
W/StaticLayout: maxLineHeight should not be -1.  maxLines:2 lineCount:2
I/chatty: uid=10079(com.jayfella.motorunner) identical 3 lines
W/StaticLayout: maxLineHeight should not be -1.  maxLines:2 lineCount:2
W/StaticLayout: maxLineHeight should not be -1.  maxLines:2 lineCount:2
I/chatty: uid=10079(com.jayfella.motorunner) identical 4 lines
W/StaticLayout: maxLineHeight should not be -1.  maxLines:2 lineCount:2
D/EGL_emulation: eglMakeCurrent: 0xa9905540: ver 2 0 (tinfo 0xa99030c0)
I/chatty: uid=10079(com.jayfella.motorunner) RenderThread identical 1 line
D/EGL_emulation: eglMakeCurrent: 0xa9905540: ver 2 0 (tinfo 0xa99030c0)