2012-02-02 30 views
7

我有一個本機活動的Android項目。 此本地活動使用名爲「main」(libmain.so文件)的共享庫來啓動。 (ndk/samples/native-activity的代碼)如何在本機活動中使用共享庫

這個應用程序工作正常。

「主」模塊Android.mk文件:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_MODULE := main 
LOCAL_SRC_FILES := main.cpp 

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM 

LOCAL_STATIC_LIBRARIES := android_native_app_glue game 

include $(BUILD_SHARED_LIBRARY) 

$(call import-module,android/native_app_glue) 

現在,我想補充的「主」庫中使用另一個共享庫(例如遊戲引擎)。 我已經構建了一個「遊戲」模塊(libgame.so)。

但是當我鏈接「主」與「遊戲」,像這樣:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_MODULE := main 
LOCAL_SRC_FILES := main.cpp 

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../game 

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM 
LOCAL_LDLIBS += $(LOCAL_PATH)/../../libs/$(TARGET_ARCH_ABI)/libgame.so 

LOCAL_STATIC_LIBRARIES := android_native_app_glue game 

include $(BUILD_SHARED_LIBRARY) 

$(call import-module,android/native_app_glue) 

的代碼沒有變化!
應用程序不啓動了,我有這個錯誤的logcat:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.myproject/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/data/com.mycompany.myproject/lib/libmain.so 

這個崩潰是由於添加鏈接到共享庫...

爲什麼鏈接到共享庫使應用程序沒有加載(崩潰)?
如何在本地Android項目中使用共享庫(no-java/native-activity)?
(我想這是可能的......否則本地活動是相當有限的......)

謝謝! :)

回答

-1

我相信你一定列出AndroidManifest.xml文件中所有的共享庫:

<meta-data android:name="android.app.lib_name" android:value="game" /> 
<meta-data android:name="android.app.lib_name" android:value="main" /> 

不知道有關庫的順序。嘗試改變順序,如果它不起作用。

+0

謝謝!但是,你確定嗎?你有沒有試過這個?我已經嘗試過,並改變順序...問題是一樣的(崩潰)[http://pastie.org/3308037](http://pastie.org/3308037) – Gaetan 2012-02-03 09:38:04

+0

我有完全相同的問題您。這並沒有解決它。 – Halsafar 2012-06-05 23:09:07

+0

是的,我的回答是不正確的。這被認爲是一個錯誤:http://code.google.com/p/android/issues/detail?id=28329簡單的解決方法是NativeActivity的子類,它具有空的活動,只有System.loadLibrary()調用來加載所有需要的庫。 – 2012-06-06 03:33:05