6

当我运行我的 AndEngine 程序时,我的手机上出现这样的错误,它在我的 frnds 手机上成功运行,但是当我尝试运行时,我收到了类似检测到固有不兼容设备的错误......

我的logcat在下面

   10-16 14:13:23.061: E/AndroidRuntime(4533): FATAL EXCEPTION: GLThread 10
   10-16 14:13:23.061: E/AndroidRuntime(4533): java.lang.ExceptionInInitializerError
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at org.andengine.opengl.vbo.attribute.VertexBufferObjectAttributeFix.glVertexAttribPointer(VertexBufferObjectAttributeFix.java:39)
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at org.andengine.opengl.vbo.attribute.VertexBufferObjectAttributes.glVertexAttribPointers(VertexBufferObjectAttributes.java:50)
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at org.andengine.opengl.shader.ShaderProgram.bind(ShaderProgram.java:126)
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at org.andengine.opengl.shader.PositionTextureCoordinatesShaderProgram.bind(PositionTextureCoordinatesShaderProgram.java:86)
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at org.andengine.opengl.vbo.VertexBufferObject.bind(VertexBufferObject.java:162)
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at org.andengine.opengl.texture.TextureWarmUpVertexBufferObject.warmup(TextureWarmUpVertexBufferObject.java:97)
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at org.andengine.opengl.texture.TextureManager.updateTextures(TextureManager.java:257)
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at org.andengine.engine.Engine.onDrawFrame(Engine.java:613)
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at org.andengine.opengl.view.EngineRenderer.onDrawFrame(EngineRenderer.java:105)
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1332)
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1116)
   10-16 14:13:23.061: E/AndroidRuntime(4533): Caused by: org.andengine.util.exception.AndEngineRuntimeException: Inherently incompatible device detected.
   10-16 14:13:23.061: E/AndroidRuntime(4533):  at org.andengine.opengl.GLES20Fix.<clinit>(GLES20Fix.java:39)
4

1 回答 1

9

正如42labs 所说

幸运的是,它很容易修复 - 在您的源根目录(AndroidManifest.xml 所在的目录)中创建一个名为 libs 的目录,然后在其中创建一个名为 armeabi 的目录。现在从这里获取 AndEnginesources(来自 OpenGL ES 2.0 分支)。您可以克隆存储库或下载它。没关系。

重要的是您应该将 libs/armeabi 中可用的 libandengine.so 复制到您刚刚在目录中创建的 libs/armeabi 中。将解决问题:)

可能这不是官方的解决方案,也许我们在AndEngine的论坛上没有看到任何注释,但是这种方法在30秒内解决了问题并且不会产生任何其他问题。

还有——为什么会崩溃?它解决了什么问题?

其实挺搞笑的。Google 开发人员在准备 Froyo Java SDK 时忘记实现一些(标准!)OpenGL ES 2.0 功能的 Java 版本。此问题的解决方案是使用 JNI 创建一个调用桥接至 SDK 中缺少的本机函数。AndEngine 在提到的 libandengine.so 中有这个桥。当引擎启动时,它会检查操作系统的版本。如果是 Froyo(或更低),它会尝试加载库。如果该库不存在,则无法解决此问题并且必须崩溃。

于 2012-10-16T08:57:58.873 回答