Mapbox Android SDK crash - "java.lang.Error: Vertex shader fill failed to compile"
Mapbox Android SDK crash - "java.lang.Error: Vertex shader fill failed to compile"
将我的 Android Studio 版本升级到 2.1.3 后,我的应用程序每次启动都会崩溃。
更准确地说,它在尝试加载我的 Mapbox 视图时崩溃(在那之前它运行良好)。
我做了一些研究,这似乎是一个已知问题,但我找不到任何解决方法来解决它...
我认为这可能只是模拟器的问题,但目前我无法在很多物理设备上尝试,所以我不确定。但无论如何,我真的需要使用模拟器来调试我的应用程序。
如果有人知道这方面的任何信息,那将非常有帮助。非常感谢!
这是我收到的错误日志。第一个:
09-16 13:27:59.063 2938-2938/flow.bricks D/mbgl: {flow.bricks}[Android]: NativeMapView::notifyMapChange()
09-16 13:27:59.065 2938-2938/flow.bricks E/mbgl: {flow.bricks}[Shader]: Shader failed to compile: ERROR: Valid GLSL but not GLSL ES
09-16 13:27:59.065 2938-2938/flow.bricks E/mbgl: {flow.bricks}[Shader]: Vertex shader fill failed to compile: precision highp float;
#ifdef GL_ES
precision highp float;
#else
#define lowp
#define mediump
#define highp
#endif
attribute vec2 a_pos;
uniform mat4 u_matrix;
uniform lowp vec4 u_color;
uniform lowp float u_opacity;
void main() {
lowp vec4 color = u_color;
lowp float opacity = u_opacity;
gl_Position = u_matrix * vec4(a_pos, 0, 1);
}
09-16 13:27:59.066 2938-2938/flow.bricks D/AndroidRuntime: Shutting down VM
第二个:
--------- beginning of crash
09-16 13:27:59.068 2938-2938/flow.bricks E/AndroidRuntime: FATAL EXCEPTION: main
Process: flow.bricks, PID: 2938
java.lang.Error: Vertex shader fill failed to compile
at com.mapbox.mapboxsdk.maps.NativeMapView.nativeRender(Native Method)
at com.mapbox.mapboxsdk.maps.NativeMapView.render(NativeMapView.java:139)
at com.mapbox.mapboxsdk.maps.MapView.onDraw(MapView.java:1377)
at android.view.View.draw(View.java:16178)
at android.view.View.updateDisplayListIfDirty(View.java:15174)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.draw(View.java:16181)
at android.support.v4.view.ViewPager.draw(ViewPager.java:2415)
at android.view.View.updateDisplayListIfDirty(View.java:15174)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.draw(View.java:16181)
at android.view.View.updateDisplayListIfDirty(View.java:15174)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.draw(View.java:16181)
at com.android.internal.policy.PhoneWindow$DecorView.draw(PhoneWindow.java:2690)
at android.view.View.updateDisplayListIfDirty(View.java:15174)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:281)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:287)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:322)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2615)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2434)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2067)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
a
基于我在 https://github.com/mapbox/react-native-mapbox-gl/issues/415#issue-177023433
找到的讨论
我能够将 Android SDK Tools
降级到 25.1.7
,并且能够启动并成功加载 x86 模拟器。
我针对 https://github.com/mapbox/mapbox-android-demo 进行了测试。
这是我的其余设置
- macOS El Capitan 10.11.6
- Android Studio 2.2
- 具体到我的mapbox-android-demo编译
classpath 'com.android.tools.build:gradle:2.2.0'
supportLibVersion = '24.2.0'
buildToolsVersion '24.0.1'
将我的 Android Studio 版本升级到 2.1.3 后,我的应用程序每次启动都会崩溃。
更准确地说,它在尝试加载我的 Mapbox 视图时崩溃(在那之前它运行良好)。
我做了一些研究,这似乎是一个已知问题,但我找不到任何解决方法来解决它...
我认为这可能只是模拟器的问题,但目前我无法在很多物理设备上尝试,所以我不确定。但无论如何,我真的需要使用模拟器来调试我的应用程序。
如果有人知道这方面的任何信息,那将非常有帮助。非常感谢!
这是我收到的错误日志。第一个:
09-16 13:27:59.063 2938-2938/flow.bricks D/mbgl: {flow.bricks}[Android]: NativeMapView::notifyMapChange()
09-16 13:27:59.065 2938-2938/flow.bricks E/mbgl: {flow.bricks}[Shader]: Shader failed to compile: ERROR: Valid GLSL but not GLSL ES
09-16 13:27:59.065 2938-2938/flow.bricks E/mbgl: {flow.bricks}[Shader]: Vertex shader fill failed to compile: precision highp float;
#ifdef GL_ES
precision highp float;
#else
#define lowp
#define mediump
#define highp
#endif
attribute vec2 a_pos;
uniform mat4 u_matrix;
uniform lowp vec4 u_color;
uniform lowp float u_opacity;
void main() {
lowp vec4 color = u_color;
lowp float opacity = u_opacity;
gl_Position = u_matrix * vec4(a_pos, 0, 1);
}
09-16 13:27:59.066 2938-2938/flow.bricks D/AndroidRuntime: Shutting down VM
第二个:
--------- beginning of crash
09-16 13:27:59.068 2938-2938/flow.bricks E/AndroidRuntime: FATAL EXCEPTION: main
Process: flow.bricks, PID: 2938
java.lang.Error: Vertex shader fill failed to compile
at com.mapbox.mapboxsdk.maps.NativeMapView.nativeRender(Native Method)
at com.mapbox.mapboxsdk.maps.NativeMapView.render(NativeMapView.java:139)
at com.mapbox.mapboxsdk.maps.MapView.onDraw(MapView.java:1377)
at android.view.View.draw(View.java:16178)
at android.view.View.updateDisplayListIfDirty(View.java:15174)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.draw(View.java:16181)
at android.support.v4.view.ViewPager.draw(ViewPager.java:2415)
at android.view.View.updateDisplayListIfDirty(View.java:15174)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.draw(View.java:16181)
at android.view.View.updateDisplayListIfDirty(View.java:15174)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.updateDisplayListIfDirty(View.java:15169)
at android.view.View.draw(View.java:15948)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.draw(View.java:16181)
at com.android.internal.policy.PhoneWindow$DecorView.draw(PhoneWindow.java:2690)
at android.view.View.updateDisplayListIfDirty(View.java:15174)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:281)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:287)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:322)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2615)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2434)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2067)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
a
基于我在 https://github.com/mapbox/react-native-mapbox-gl/issues/415#issue-177023433
找到的讨论我能够将 Android SDK Tools
降级到 25.1.7
,并且能够启动并成功加载 x86 模拟器。
我针对 https://github.com/mapbox/mapbox-android-demo 进行了测试。
这是我的其余设置
- macOS El Capitan 10.11.6
- Android Studio 2.2
- 具体到我的mapbox-android-demo编译
classpath 'com.android.tools.build:gradle:2.2.0'
supportLibVersion = '24.2.0'
buildToolsVersion '24.0.1'