2012-02-02 13 views
7

मेरे पास एक मूल गतिविधि वाला एंड्रॉइड प्रोजेक्ट है। यह मूल गतिविधि प्रारंभ करने के लिए "मुख्य" (libmain.so फ़ाइल) नामक एक साझा लाइब्रेरी का उपयोग करती है। (एनएनडी/नमूने/देशी गतिविधि के कोड के साथ)देशी गतिविधि में साझा लाइब्रेरी का उपयोग कैसे करें

यह ऐप ठीक काम करता है।

"मुख्य" मॉड्यूल 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 

यह दुर्घटना एक साझा लाइब्रेरी में लिंक जोड़ने की वजह से है ...

क्यों एक साझा लाइब्रेरी में जोड़ने बनाने ऐप लोड नहीं हो रहा है (दुर्घटना)?
मैं मूल एंड्रॉइड प्रोजेक्ट (नो-जावा/मूल-गतिविधि) में साझा लाइब्रेरी का उपयोग कैसे कर सकता हूं?
(मुझे लगता है कि यह संभव हो सकता है ... अन्यथा मूल गतिविधि काफी सीमित है ...)

धन्यवाद! :)

उत्तर

-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

+0

मुझे एक ही समस्या है आप। यह ठीक नहीं हुआ। – Halsafar

+0

हां, मेरा जवाब गलत था। इसे एक बग के रूप में माना जाता है: http://code.google.com/p/android/issues/detail?id=28329 सरल वर्कअराउंड खाली गतिविधि के साथ मूल गतिविधि सक्रिय होगी जिसमें केवल System.loadLibrary() सभी आवश्यक पुस्तकालयों को लोड करने के लिए कॉल करता है । –

संबंधित मुद्दे

 संबंधित मुद्दे