更新Android MapBox SDK 4.1.0 / 4.1.1后,我的应用程序在Android模拟器上崩溃:
E/mbgl: [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;
void main() {
gl_Position = u_matrix * vec4(a_pos, 0, 1);
}
07-23 00:07:06.818 8965-8965/? A/libc: Fatal signal 11 (SIGSEGV) at 0xdeadcab1 (code=1), thread 8965 (pboxandroiddemo)
应用程序在Android物理设备上运行时没有崩溃,并且使用MapBox SDK 4.0.0进行编译。
在https://github.com/mapbox/mapbox-android-demo上的MapBox示例在本地编译时崩溃并出现相同的错误。
使用以下图片在Linux Mint上测试:
Intel x86 Atom_System Image API 19修订版22 Intel x86 Atom_System Image API 23修订版15 英特尔x86 Atom_64系统映像API 24修订版5
这是已知的问题吗?此崩溃是否会影响物理设备上的生产?有没有解决方法?
答案 0 :(得分:2)
对于那些使用模拟器的人:
可以通过在AVD设置中将模拟图形更改为Software - GLES 2.0
来解决此问题。这不是理想的,但它可以工作(并且仍然比模拟ARM设备更快 )。
我怀疑这是特定于模拟器的。
答案 1 :(得分:0)
我假设你的意思是Android Mapbox SDK 4.1.0 / 4.1.1而不是DropBox;)
首先,确保您始终使用最新版本的SDK,4.1.1修复了可能会破坏您应用的重要错误。这听起来像是模拟器可能没有正确设置OpenGL的问题。我不熟悉Linux Mint,但您需要确保您的图形驱动程序已安装并且是最新的。它还需要能够支持OpenGL 2.0或更高版本。
我们不保证Mapbox能够在模拟器上工作,但我们会努力确保Mapbox能够在尽可能多的物理设备上运行。如果必须使用模拟器,我们建议使用内置的Android Studio或Genymotion。
答案 2 :(得分:0)
这是已知的问题吗?此崩溃是否会影响生产 物理设备?有没有解决方法?
回答 -
我还在使用Android Studio的OS X中的x86模拟器上看到了相同的崩溃。在ARM设备上传递了相同的应用程序。
正如您所提到的,模拟器是Intel x86 Atom_System
图像。
使用gradle作为AAR
文件编译的Mapbox Android SDK包含用于不同设备处理器的多个共享对象,包括ARM,x86和MIPS。
也就是说,当你使用这个
时compile ('com.mapbox.mapboxsdk:mapbox-android-sdk:4.1.0@aar')
您在Android APK中获得了几个libmapbox-gl.so共享对象
答案 3 :(得分:0)
我已经确认此问题确实会导致Android x86物理设备崩溃。 RemixOS具有与catlog完全相同的崩溃 - 如果有人想要完整的日志 - 让我知道,但它与上面大致相同,除了我还有reg转储和回溯显示它是源自mapbox的SDK这个问题。
我的猜测是问题是因为大多数Android x86设备都不支持OpenGL的ES变体(适用于嵌入式设备),而是支持完整的桌面规范。这通常不是一个问题,但#ifdef专门测试ES变体,然后#define's远离我认为需要定义的几种类型。 ES变体将highp设置为浮点数,而非ES代码将其留空!这会导致编译问题(基本上是通过LLVM进行JIT),然后是缺少代码和崩溃的问题。