Ошибка запуска приложения Android NDK - PullRequest
2 голосов
/ 01 августа 2011

Я написал 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: ПРЕДУПРЕЖДЕНИЕ / dalvikvm (1384): threadid = 1: поток, выходящий с неперехваченным исключением (группа = 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-3123: 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.so 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: ОШИБКА / AndroidRuntime (1384): ... 11 еще 07-31 23: 13: 11.780: ПРЕДУПРЕЖДЕНИЕ / ActivityManager (288): принудительно завершить действие com.Mythica.SpiderGame / android.app.NativeActivity 07-3123: 13: 11.800: ОШИБКА / android.os.Debug (288): состояние дампа> / data / log / dumpstate_app_error

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Вы должны прочитать docs / PREBUILTS.html в NDK. Вы можете добавить секцию, похожую на эту, в свой файл 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)

, а затем, перед тем как позвонить BUILD_SHARED_LIBRARY в конце вашего Android.mk, введите:

LOCAL_SHARED_LIBRARIES := MyLibrary-prebuilt

Предполагается, что вам каким-то образом удалось кросс-компилировать вашу библиотеку для ARM вне системы сборки ndk. Если вы хотите собрать свою разделяемую библиотеку из ndk-build, вы делаете это так же, как собираете .so для своей нативной деятельности.

0 голосов
/ 06 августа 2011

Решением моей проблемы оказалось создание моей игровой библиотеки как статического объекта, а не как общего объекта.MyApp ссылается на MyLibrary.so, и я предполагаю, что разделяемую библиотеку необходимо скопировать на устройство вручную перед выполнением, хотя я не проверял эту теорию, так как статическое связывание делает эту работу.

Если я 'Правильно, неверное предположение заключалось в том, что любые мои общие библиотеки будут встроены в мой .apk точно так же, как встроенный NativeActivity.

...