6

AndEngine プログラムを実行すると、携帯電話でこのようなエラーが発生しますが、友人の携帯電話では正常に実行されますが、実行しようとすると、本質的に互換性のないデバイスが検出されたようなエラーが発生します...

私の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 にこのブリッジがあります。エンジンが起動すると、OS のバージョンがチェックされます。Froyo (またはそれ以下) の場合、ライブラリをロードしようとします。ライブラリが存在しない場合、これを解決する方法がなく、クラッシュする必要があります。

于 2012-10-16T08:57:58.873 に答える