1

我编写了一个在启动时崩溃的 NativeActivity,因为(我的理论......)我在命名共享库或模块或 AndroidManifest.xml 中的某些东西时做错了。下面是我的应用程序启动时 LogCat 的输出,以及我的清单文件的内容。

我在设置时出错的任何想法?

谢谢, ALF

===================清单============================== ================

<?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: ERROR/AndroidRuntime(1384): 致命异常: main 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: ERROR/AndroidRuntime(1384): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1005) 07-31 23:13:11.780: ERROR/AndroidRuntime(1384): at android.os.Handler。 dispatchMessage(Handler.java:99) 07-31 23:13:11.780: ERROR/AndroidRuntime(1384): at android.os.Looper.loop(Looper.java:132) 07-31 23:13:11.780: ERROR/ 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(方法。 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 更多 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 并且我猜共享库必须在运行前手动复制到设备上,尽管我没有通过这样做来测试该理论,因为静态链接正在完成这项工作。

如果我是正确的,那么无效的假设是认为我自己的任何共享库都将内置到我的 .apk 中,就像内置 NativeActivity 一样。

于 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 回答