1

デスクトップに展開するlibgdxフレームワークで構築された、完全に機能するJavaアプリケーションがあります。ただし、コードを取得して、そこから Android アプリを作成したいと思います。

Android プロジェクトを作成し、コードを Android プロジェクトのソース フォルダーに再ルーティングし、Android 固有のメイン メソッドを追加し、マニフェスト xml ファイルを編集してメイン アクティビティ (この場合は「RoadRusherActivity」) を使用しました。ただし、次のエラーが発生します。

04-28 15:44:41.195: E/Trace(2452): error opening trace file: No such file or directory (2)
04-28 15:44:41.355: D/dalvikvm(2452): Trying to load lib /data/app-lib/com.me.mygdxgame-2/libgdx.so 0x40ce58c8
04-28 15:44:41.385: D/dalvikvm(2452): Added shared lib /data/app-lib/com.me.mygdxgame-2/libgdx.so 0x40ce58c8
04-28 15:44:41.415: D/dalvikvm(2452): No JNI_OnLoad found in /data/app-lib/com.me.mygdxgame-2/libgdx.so 0x40ce58c8, skipping init
04-28 15:44:41.465: D/libEGL(2452): Emulator without GPU support detected. Fallback to software renderer.
04-28 15:44:41.485: D/libEGL(2452): loaded /system/lib/egl/libGLES_android.so
04-28 15:44:41.675: D/AndroidRuntime(2452): Shutting down VM
04-28 15:44:41.675: W/dalvikvm(2452): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
04-28 15:44:41.685: E/AndroidRuntime(2452): FATAL EXCEPTION: main
04-28 15:44:41.685: E/AndroidRuntime(2452): java.lang.RuntimeException: Unable to resume activity {com.me.mygdxgame/com.me.mygdxgame.RoadRusherActivity}: java.lang.SecurityException: Neither user 10048 nor current process has android.permission.WAKE_LOCK.
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2742)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.os.Looper.loop(Looper.java:137)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.app.ActivityThread.main(ActivityThread.java:5041)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at java.lang.reflect.Method.invokeNative(Native Method)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at java.lang.reflect.Method.invoke(Method.java:511)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at dalvik.system.NativeStart.main(Native Method)
04-28 15:44:41.685: E/AndroidRuntime(2452): Caused by: java.lang.SecurityException: Neither user 10048 nor current process has android.permission.WAKE_LOCK.
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.os.Parcel.readException(Parcel.java:1425)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.os.Parcel.readException(Parcel.java:1379)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.os.IPowerManager$Stub$Proxy.acquireWakeLock(IPowerManager.java:271)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.os.PowerManager$WakeLock.acquireLocked(PowerManager.java:717)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.os.PowerManager$WakeLock.acquire(PowerManager.java:686)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at com.badlogic.gdx.backends.android.AndroidApplication.onResume(AndroidApplication.java:241)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1185)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.app.Activity.performResume(Activity.java:5182)
04-28 15:44:41.685: E/AndroidRuntime(2452):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732)
04-28 15:44:41.685: E/AndroidRuntime(2452):     ... 12 more
04-28 15:44:47.705: I/Process(2452): Sending signal. PID: 2452 SIG: 9

以下は私のマニフェストです:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.me.mygdxgame"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".RoadRusherActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/app_name"
            android:screenOrientation="landscape"
            android:theme="@style/FullscreenTheme" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

以下は、「RoadRusherActivity」というタイトルのメイン アクティビティ クラスです。

package com.me.mygdxgame;
import android.os.Bundle;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
public class RoadRusherActivity extends AndroidApplication {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
    config.useAccelerometer = false;
    config.useCompass = false;
    config.useWakelock = true;
    config.useGL20 = true;
    initialize(new SimpleBike(), config);
}
}

Androidへの移植、アプローチの仕方に戸惑うばかりです。どんな提案でも大歓迎です!

4

1 に答える 1

3

更新された例外は、問題を識別します。

Caused by: java.lang.SecurityException: Neither user 10048 nor current process has android.permission.WAKE_LOCK.

これをマニフェストに追加するだけです。

<uses-permission android:name="android.permission.WAKE_LOCK"/>

参照: https://code.google.com/p/libgdx/wiki/ApplicationConfiguration#Permissions

または、wake lock を使用するつもりがない場合は、次の行config.useWakelock = true;を削除しますRoadRusherActivity

更新:以下のコメントで述べたように、画面をオンのままにしておくだけの場合はWindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON、ウェイク ロックの代わりに使用する必要があります。onCreateこれをメソッドに追加します。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
于 2013-05-24T22:56:11.730 に答える