2011-08-01 192 views
2

我寫了一個啓動時崩潰的NativeActivity,因爲(我的理論......)我在做錯誤的命名共享庫或模塊或AndroidManifest.xml中的某些內容。下面是我的應用程序啓動時的LogCat輸出,以及我的清單文件的內容。啓動Android NDK應用程序時出錯

任何想法,我錯誤地設置了這個嗎?

感謝, 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 OUTPUT =============================================

07-31 23:13:11.770:WARN/dalvikvm(1384):線程ID = 1:螺紋與未捕獲的異常退出(組= 0x4016d760) 07-31 23:13:11.780:ERROR/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):at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1751) 07-31 23:13:11.780:ERROR/AndroidRuntime(1384):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1767) 07-31 23:13:11.780:ERROR/AndroidRuntime(1384):at 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):at android.app.ActivityThread.main(ActivityThread.java:4028) 07-31 23:13:11.780:ERROR/AndroidRuntime(1384):at java.lang.reflect.Method.invokeNative(Native Method) 07-31 23:13:11.780:ERROR/AndroidRuntime(1384):at java.lang.reflect .Method.invoke(Method.java:491) 07-31 23:13:11.780:ERROR/AndroidRuntime(1384):at 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:ERROR/AndroidRuntime(1384):at android.app.NativeActivity .onCreate(NativeActivity.java:199) 07-31 23:13:11.780:ERROR/AndroidRuntime(1384):at 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:WARN/ActivityManager(288):強制整理活動com.Mythica.SpiderGame /和roid.app.NativeActivity 07-31 23:13:11.800:ERROR/android.os.Debug(288):Dumpstate>/data/log/dumpstate_app_error

+0

你的.so在哪裏?您的設備是否支持NativeActivity? – qrtt1

+0

我以爲我的.so是作爲依賴項構建到.apk中的,但是這個假設必須是無效的。該設備支持NativeActivity。 – ALF

回答

0

我的問題的解決方案竟然是構建我的遊戲庫作爲靜態對象而不是共享對象。 MyApp引用MyLibrary。所以我想這個共享庫必須在運行前手動複製到設備上,但是由於靜態鏈接正在完成這項工作,所以我沒有通過這樣做來測試這個理論。

如果我是正確的,那麼無效的假設就是認爲我自己的任何共享庫都將內置到我的.apk中,就像NativeActivity是內置的。

0

您應該閱讀NDK中的文檔/ 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) 

然後調用BUILD_SHARED_LIBRARY在你的Android.mk結束之前,你把這個:

LOCAL_SHARED_LIBRARIES := MyLibrary-prebuilt 

這假設你已經設法在ndk編譯系統之外交叉編譯你的ARM庫。如果你想從ndk-build中構建你的共享庫,你可以像爲你的本地活動構建.so一樣。

相關問題