2012-02-02 12 views
7

Tôi có một dự án Android có hoạt động gốc. Hoạt động gốc này sử dụng thư viện được chia sẻ có tên "chính" (tệp libmain.so) để bắt đầu. (với mã số của ndk/mẫu/hoạt động gốc)Cách sử dụng thư viện được chia sẻ trong hoạt động gốc

Ứng dụng này hoạt động tốt.

"chính" mô-đun Android.mk file:

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) 

Bây giờ tôi muốn thêm một thư viện chia sẻ (ví dụ như một công cụ trò chơi) được sử dụng bởi thư viện "chính". Tôi đã xây dựng một mô-đun "trò chơi" (libgame.so).

Nhưng khi tôi liên kết "chính" với "trò chơi", như thế này:

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) 

với mã không có thay đổi!
ứng dụng không khởi động được nữa và tôi có lỗi này trong 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 

vụ tai nạn này là do cách thêm liên kết đến một thư viện chia sẻ ...

Tại sao liên kết đến một thư viện chia sẻ làm cho ứng dụng không tải (lỗi)?
Tôi làm cách nào để sử dụng thư viện được chia sẻ trong dự án android gốc (no-java/native-activity)?
(Tôi cho rằng điều đó có thể xảy ra ... nếu không hoạt động gốc rất hạn chế ...)

Cảm ơn! :)

Trả lời

-1

Tôi tin rằng bạn phải liệt kê tất cả các thư viện chia sẻ của bạn trong file AndroidManifest.xml:

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

Không chắc về thứ tự của thư viện. Hãy thử thay đổi thứ tự nếu nó không hoạt động.

+0

Cảm ơn! Nhưng, bạn có chắc không? Bạn đã thử điều này chưa? Tôi đã thử điều này và thay đổi thứ tự ... vấn đề là như nhau (lỗi) [http://pastie.org/3308037](http://pastie.org/3308037) – Gaetan

+0

Tôi gặp vấn đề tương tự như bạn. Điều này không khắc phục được. – Halsafar

+0

Có, câu trả lời của tôi không chính xác. Đây được coi là lỗi: http://code.google.com/p/android/issues/detail?id=28329 Giải pháp đơn giản sẽ là lớp con NativeActivity với hoạt động trống chỉ có System.loadLibrary() gọi để tải tất cả thư viện cần thiết . –