アクティビティから開始するライブ壁紙を作成します。アクティビティは libgdx の opengl20 を使用します。初めてアクティビティを開始するときは問題ありませんが、2 回目はライブ壁紙がクラッシュします。shader.begin()毎回ではなく、時々 。それから活動を始めなければ問題ありません。
AndroidManifest.xml
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".LivewallpaperSettings" 
              android:label="Livewallpaper Settings"
              android:parentActivityName="com.me.mygdxgame.MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>
    <service android:name=".LiveWallpaper"
        android:label="@string/app_name"
        android:permission="android.permission.BIND_WALLPAPER">
        <intent-filter>
            <action android:name="android.service.wallpaper.WallpaperService" />
        </intent-filter>
        <meta-data android:name="android.service.wallpaper"
            android:resource="@xml/livewallpaper" />
    </service>
</application>
ライブ壁紙コードを開始
            Intent i = new Intent();
            if (Build.VERSION.SDK_INT > 15)
            {
                i.setAction(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
                String pkg = LiveWallpaper.class.getPackage().getName();
                String cls = LiveWallpaper.class.getCanonicalName();
                i.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, new ComponentName(pkg, cls));
            }
            else
            {
                i.setAction(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER);
            }
            startActivityForResult(i, 0);
クラッシュ情報
06-27 11:03:22.576: D/dalvikvm(7139): GC_CONCURRENT 解放 246K、13% 解放 11375K/12999K、一時停止 15ms+10ms、合計 61ms 06-27 11:03:22.626: W/dalvikvm(7139): threadid=16: キャッチされない例外で終了するスレッド (group=0x40e4c300) 06-26 11:45:09.936: E/AndroidRuntime(19979): 致命的な例外: GLThread 9758 06-26 11:45:09.936: E/AndroidRuntime(19979): java.lang.NullPointerException 06-26 11:45:09.936: E/AndroidRuntime(19979): com.badlogic.gdx.graphics.glutils.ShaderProgram.begin(ShaderProgram.java:745) 06-26 11:45:09.936: E/AndroidRuntime(19979): com.wall.wall.MeshShaderTest.render(MeshShaderTest.java:78) 06-26 11:45:09.936: E/AndroidRuntime (19979): com.badlogic.gdx.backends.android.AndroidGraphicsLiveWallpaper.onDrawFrame (AndroidGraphicsLiveWallpaper.java:625) で 06-26 11:45:09.936: E/AndroidRuntime(19979): android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1546) で 06-26 11:45:09.936: E/AndroidRuntime(19979): android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1247) で 06-26 11:45:09.941: E/ウィンドウ (1782): リン。画面がオフの場合でも機能を終了します。
シェーダー
問題ないと思います。
    vertexShader = "attribute vec4 a_Position;    \n"
                    + "attribute vec2 a_texCoords;    \n"
                    + "uniform mat4 u_mvp_matrix;\n"
                    + "varying vec2 v_texCoords;     \n"
                    + "void main()                   \n"
                    + "{                             \n"
            //      + "   gl_Position = a_Position;  \n"
                    + " gl_Position = u_mvp_matrix * a_Position;\n"
                    + "   v_texCoords = a_texCoords;  \n"
                    + "}                             \n";
// this one tells it what goes in between the points (i.e
// colour/texture)
  fragmentShader = "#ifdef GL_ES                \n"
                      + "precision mediump float;    \n"
                      + "#endif                      \n"
                      + "varying vec2 v_texCoords;   \n"
                      + "uniform sampler2D u_texture;\n"
                      + "void main()                 \n"
                      + "{                           \n"
                     // + "  gl_FragColor = vec4(1.0,0.0,0.0,1.0);  \n"
                      + "  gl_FragColor =  texture2D(u_texture, v_texCoords);   \n"
                      + "}";
    meshShader = new ShaderProgram(vertexShader, fragmentShader);