1

起動時にクラッシュする NativeActivity を作成しました。これは、(私の理論では...) AndroidManifest.xml で共有ライブラリやモジュール、または何かに名前を付けるのが間違っているためです。以下は、アプリを起動したときの LogCat の出力と、マニフェスト ファイルの内容です。

これを設定する際に間違ったアイデアはありますか?

ありがとう、アルフ

===================マニフェスト============================= ===============

<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.Mythica.SpiderGame"
        android:versionCode="1"
        android:versionName="1.0">

    <!-- This is the platform API where NativeActivity was introduced. -->
    <uses-sdk android:minSdkVersion="12" />

    <!-- This .apk has no Java code itself, so set hasCode to false. -->
    <application android:label="@string/app_name" android:hasCode="false">

        <!-- Our activity is the built-in NativeActivity framework class.
             This will take care of integrating with our NDK code. -->
        <activity android:name="android.app.NativeActivity"
                android:label="@string/app_name"
                android:configChanges="orientation|keyboardHidden">
            <!-- Tell NativeActivity the name of or .so -->
            <meta-data android:name="android.app.lib_name"
                    android:value="SpiderGame" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
<!-- END_INCLUDE(manifest) -->

===================LOGCAT出力============================ ================

07-31 23:13:11.770: WARN/dalvikvm(1384): threadid=1: キャッチされない例外で終了するスレッド (group=0x4016d760) 07-31 23:13:11.780: エラー/AndroidRuntime(1384): 致命的な例外: メイン07-31 23:13:11.780: エラー/AndroidRuntime(1384): java.lang.RuntimeException: アクティビティを開始できません ComponentInfo{com.Mythica.SpiderGame/android.app.NativeActivity}: java.lang.IllegalArgumentException: ロードできませんネイティブ ライブラリ: /data/data/com.Mythica.SpiderGame/lib/libSpiderGame.so 07-31 23:13:11.780: エラー/AndroidRuntime(1384): android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1751) 07-31 23:13:11.780: エラー/AndroidRuntime(1384): Android で。 app.ActivityThread.handleLaunchActivity(ActivityThread.java:1767) 07-31 23:13:11.780: エラー/AndroidRuntime(1384): android.app.ActivityThread.access$1500(ActivityThread.java:122) で 07-31 23:13 :11.780: エラー/AndroidRuntime(1384): android.app.ActivityThread$H.handleMessage(ActivityThread.java:1005) 07-31 23:13:11.780: エラー/AndroidRuntime(1384): android.os.Handler で。 dispatchMessage(Handler.java:99) 07-31 23:13:11.780: エラー/AndroidRuntime(1384): android.os.Looper.loop(Looper.java:132) 07-31 23:13:11.780: エラー/ AndroidRuntime (1384): android.app.ActivityThread.main (ActivityThread.java:4028) 07-31 23:13:11.780:エラー/AndroidRuntime(1384): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 07-31 23:13:11.780: エラー/AndroidRuntime(1384): java.lang.reflect.Method.invoke(Method. java:491) 07-31 23:13:11.780: エラー/AndroidRuntime(1384): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 07-31 23:13:11.780:エラー/AndroidRuntime(1384): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 07-31 23:13:11.780: エラー/AndroidRuntime(1384): dalvik.system.NativeStart.main で(ネイティブ メソッド) 07-31 23:13:11.780: エラー/AndroidRuntime(1384): 原因: java.lang.IllegalArgumentException: ネイティブ ライブラリを読み込めません: /data/data/com.Mythica.SpiderGame/lib/libSpiderGame。そう 07-31 23:13:11.780: エラー/AndroidRuntime(1384): android.app.NativeActivity.onCreate(NativeActivity.java:199) 07-31 23:13:11 で。780: エラー/AndroidRuntime(1384): android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 07-31 23:13:11.780: エラー/AndroidRuntime(1384): android.app.ActivityThread.performLaunchActivity(ActivityThread) .java:1715) 07-31 23:13:11.780: ERROR/AndroidRuntime(1384): ... 11 more 07-31 23:13:11.780: WARN/ActivityManager(288): 強制終了アクティビティ com.Mythica.SpiderGame /android.app.NativeActivity 07-31 23:13:11.800: エラー/android.os.Debug(288): Dumpstate > /data/log/dumpstate_app_errorWARN/ActivityManager(288): 強制終了アクティビティ com.Mythica.SpiderGame/android.app.NativeActivity 07-31 23:13:11.800: ERROR/android.os.Debug(288): Dumpstate > /data/log/dumpstate_app_errorWARN/ActivityManager(288): 強制終了アクティビティ com.Mythica.SpiderGame/android.app.NativeActivity 07-31 23:13:11.800: ERROR/android.os.Debug(288): Dumpstate > /data/log/dumpstate_app_error

4

2 に答える 2

0

私の問題の解決策は、ゲームライブラリを共有オブジェクトではなく静的オブジェクトとして構築することでした。MyAppはMyLibrary.soを参照しており、静的リンクが機能しているため、共有ライブラリを実行前に手動でデバイスにコピーする必要があると思いますが、そうすることでその理論をテストしていません。

私が正しければ、NativeActivityが組み込まれているのと同じように、自分の共有ライブラリが.apkに組み込まれると考えていたというのは無効な仮定でした。

于 2011-08-06T13:15:25.910 に答える
0

NDK の docs/PREBUILTS.html を読む必要があります。次のようなセクションを Android.mk ファイルに追加できます。

#
# Include prebuilt shared library
#
include $(CLEAR_VARS)
LOCAL_MODULE := MyLibrary-prebuilt
LOCAL_SRC_FILES := relative/path/to/MyLibrary.so
LOCAL_EXPORT_C_INCLUDES := relative/path/to/includes
include $(PREBUILT_SHARED_LIBRARY)

そして、Android.mk の最後で BUILD_SHARED_LIBRARY を呼び出す直前に、次のように記述します。

LOCAL_SHARED_LIBRARIES := MyLibrary-prebuilt

これは、ndk ビルド システムの外部で、何らかの方法で ARM 用のライブラリをクロスコンパイルしたことを前提としています。ndk-build 内から共有ライブラリをビルドする場合は、ネイティブ アクティビティの .so をビルドするのと同じ方法で行います。

于 2011-08-11T20:05:12.243 に答える