2016-07-23 74 views
1

更新至Android SDK MapBox之後4.1.0/4.1.1 Android模擬器我的應用程序崩潰,:更新後MapBox的Android應用程序崩潰到SDK 4.1.0在模擬器

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薄荷與以下圖象:

英特爾86 Atom_System圖像API 19修訂22 英特爾86 Atom_System圖像API 23修訂15 英特爾86 Atom_64系統圖像API 24修訂版5

這是公知的問題?這次崩潰會影響物理設備上的生產構建嗎?有什麼解決方法嗎?

+0

使用mapbox-android-sdk:[email protected]和mapbox-android-sdk:[email protected] – RobLabs

+1

在模擬器上發生崩潰它似乎不是Mapbox的問題,但是與Android模擬器和「Android SDK工具」,至少對於macOS來說。請參閱http://stackoverflow.com/a/39731164/388210 – RobLabs

回答

0

我假設你的意思是Android的SDK Mapbox 4.1.0/4.1.1,而不是投放箱;)

首先,確保你總是使用最新版本的SDK,4.1.1修復的重要錯誤,可能會破壞你的應用程序。這聽起來像是模擬器可能沒有正確安裝OpenGL的問題。我不熟悉Linux Mint,但您需要確保您的圖形驅動程序已安裝並且是最新的。它還需要能夠支持OpenGL 2.0或更高版本。

我們不保證Mapbox能夠在仿真器上工作,但我們盡力確保Mapbox能夠在儘可能多的物理設備上工作。如果必須使用模擬器,我們建議使用內置的Android Studio 1或Genymotion

+0

該問題可以在Android Studio中構建的仿真器上以及在SDK 4.1.1上的OS X上覆制。所以OpenGL設置或圖形卡可能沒有問題。是否有任何計劃來看待問題並可能解決問題? MapBox SDK 4.0.0沒有問題。 – intra

+0

請看我對此的回答。對圖形使用軟件仿真似乎可以解決問題,支持您聲稱它是仿真器問題。 –

0

這是已知的問題嗎?這次崩潰是否會影響物理設備上的生產版本?有什麼解決方法嗎?

回答 -

  • 如果你崩潰在x86模擬器,然後有一個真的很好的機會,它會崩潰的x86設備上。
  • 如果你傳遞一個ARM設備上測試,有一個真的很好的機會,你的應用程序將正常工作在ARM設備
  • 如果不回答你最初的問題,再有就是Mapbox issue #5456有一些討論。

我也看到了OS X中的x86模擬器與Android Studio相同的崩潰。在ARM設備上傳遞相同的應用程序。

正如您所說,模擬器是Intel x86 Atom_System圖像。

使用Gradle作爲AAR文件編譯的Mapbox Android SDK包含用於不同設備處理器的幾個共享對象,包括ARM,x86和MIPS。

也就是說,當你使用這個

compile ('com.mapbox.mapboxsdk:mapbox-android-sdk:[email protected]') 

你得到幾個libmapbox-gl.so共享對象在你的Android APK

enter image description here

2

對於那些使用模擬器:

這可以通過在AVD設置中將仿真圖形更改爲Software - GLES 2.0來解決。這是不理想的,但它會工作(並且仍然比模擬ARM設備更快)。

我懷疑這是仿真器特定的。

0

我已驗證此問題實際上是否會崩潰Android x86物理設備。 RemixOS與從catlog中可以看到的完全相同 - 如果任何人想要完整日誌 - 請告訴我,但其大部分與上述相同,只是我也有reg轉儲和backtrace,表明它是源自mapbox的SDK問題。

我的猜測是,這個問題是因爲大多數Android x86設備不支持OpenGL的ES變體(用於嵌入式設備),而是完整的桌面規格。這通常不是一個問題,但#ifdef特別針對ES變體進行測試,然後#define去掉了一些我認爲需要定義的類型。 ES變體將highp設置爲浮點數,而非ES代碼將其留空!這會導致編譯問題(基本上通過LLVM進行JIT),然後導致缺少代碼和崩潰。

相關問題