2014-11-25 16 views
8

के लिए आयात नहीं मिला (। मुझे पता है कि NetworkInfo के लिए parcelable जोड़ने के बारे में stackoverflow और अन्य जगहों पर कई सवाल (गूगल समूह) की तरह कर रहे हैं, लेकिन यह है कि के बारे में नहीं है)एंड्रॉयड AIDL संकलित करें: वर्ग

मेरा काम $ (AOSP_ROOT)/डिवाइस/के अंतर्गत है और इसमें कई सहायता फ़ाइलें शामिल हैं। यह की तरह है में से एक,

package com.example; 

parcelable SomeRequest; 

और एक और AIDL की तरह है,

package com.example; 

import com.example.SomeRequest; 
interface SomeService { 
    SomeRequest getRequest(); 
} 

और मैं की तरह त्रुटियों संकलन मिल जाएगा,

device/somedevice/sdk/libs/aidl/com/example/SomeService.aidl:9: couldn't find import for class com.example.SomeRequest 

मैं सोच रहा हूँ यह आदेश है प्रसंस्करण सहायक फाइलों का। मेरे Android.mk लगता है,

LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, aidl) 
LOCAL_AIDL_INCLUDES := $(call all-Iaidl-files-under, aidl) 

के बाद मैं src/फ़ोल्डर से AIDL फ़ाइलें स्थानांतरित/फ़ोल्डर AIDL करने के लिए (मैं ऐसा करने के लिए है किसी कारण के लिए) यह निर्माण त्रुटि शुरू की है। यह पहले काम करता था लेकिन अब भी अगर मैं इसे वापस src/फ़ोल्डर में ले जाता हूं तो यह अब काम नहीं करता है। मैंने $ (AOSP_ROOT)/आउट/डिवाइस/लक्ष्य को साफ़ करने की कोशिश की लेकिन यह मदद नहीं कर रहा है।

विचार?

+0

यह लिंक बहुत उपयोगी था: http://fauxgrammer.com/?p=4 – user2288580

उत्तर

6

अंततः मुझे इसका समाधान हो गया।

यदि आप /build/core/base_rules.mk में खोदते हैं, तो आप पाएंगे कि LOCAL_AIDL_INCLUDES वास्तव में फ़ोल्डर्स जैसे डिफ़ॉल्ट फ़ोल्डर के अतिरिक्त एआईडीएल संकलन चरण के दौरान शामिल किए जाने वाले फ़ोल्डर्स हैं।

$(aidl_java_sources): PRIVATE_AIDL_FLAGS := -b $(addprefix -p,$(aidl_preprocess_import)) -I$(LOCAL_PATH) -I$(LOCAL_PATH)/src $(addprefix -I,$(LOCAL_AIDL_INCLUDES)) 

इस विशिष्ट मामले में, आप क्या चाहते हैं वास्तव में है,

LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, aidl) 
LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/aidl 
+0

'/ build/core/base_rules.mk' क्या है? मुझे यह रास्ता नहीं मिल रहा है ... – m0skit0

+1

क्या होगा यदि मेरी * .aidl फ़ाइल लाइब्रेरी में परिभाषित है, वर्तमान स्थानीय पथ में नहीं है, जैसे ../LibraryProject/aidl, कैसे ठीक करें? – codezjx

3

तो मैं चारों ओर देखा - समाधान केवल अपने स्वयं निर्देशिका AIDL कहा जाता है, जो मैं कुछ लगता है में AIDL फ़ाइलें डाल करने के लिए है दूसरों ने सुझाव दिया है।

यह पता चला है कि एंड्रॉइड स्टूडियो वहां दिखता है, लेकिन यह नहीं जानता कि .ADl फ़ाइलों को src निर्देशिका में डाला गया है।

मुझे यह नहीं मिला। मुझे यह बिलकुल समझ में नहीं आया। एडीएल आयात ईक्लीप्स में पूरी तरह से काम किया। एंड्रॉइड स्टूडियो उत्पादन तैयार नहीं है। यह पीछे एक बड़ा कदम है।

मुझे एडीएल कंपाइलर को आयात खोजने में भी परेशानी हो रही है, और मुझे लगता है कि बेस_रूल्स.एमके को संशोधित करने से बेहतर तरीका होना चाहिए, जो मंच प्रबंधन करता है।

Arg!

+0

एक संबंधित लिंक [http://fauxgrammer.com/?p=4 ](http://fauxgrammer.com/?p=4) –

+0

मैं एंड्रॉइड स्टूडियो 2.1 का उपयोग कर रहा हूं और आपने जो कुछ भी सुझाया है वह बहुत कुछ किया: 2 रखो helpl फ़ोल्डर में .aidl फ़ाइलें। हालांकि, मेरे साथ क्या हुआ कि एंड्रॉइड स्टूडियो ने मुझे दूसरा .aidl (यानी, कुछ Request.aidl ओपी पर आधारित) बनाने के लिए रोका। यह पता चला है कि आपको इस फ़ाइल को थोड़ा सा ब्रूट-फोर्सी बनाने की आवश्यकता है: यादृच्छिक नाम के साथ एक .aidl बनाएं और फिर सही नाम पर बदलें। अन्यथा एंड्रॉइड स्टूडियो खुश नहीं है। – TimeString

+0

मेरे पास पहले से ही एक अलग सहायता/फ़ोल्डर में एडीएल फाइलें हैं। मैंने subfolder के साथ src/और रूट फ़ोल्डर में भी कोशिश की। अभी भी एक ही समस्या है। – m0skit0

0

ठीक है, इसलिए मैं इस समस्या को समझने की कोशिश कर रहे दिनों के लिए संघर्ष कर रहा था। स्वच्छ/पुनर्निर्माण मेरे लिए काम नहीं किया। आखिरकार, मुझे एंड्रॉइड स्टूडियो में एक बहुत ही सरल गलती हुई - जब मैंने अपने माउस पर राइट-क्लिक किया और एक नया "एआईडीएल" बनाया, तो मैं अपने मूल मॉडल वर्ग के रूप में उचित फ़ोल्डर में क्लिक नहीं कर रहा था।

उदाहरण के लिए, मेरा मॉडल com.example.model नामक जावा पैकेज में था, लेकिन जब मैंने अपना एडीएल बनाया था तो मैं उस फ़ोल्डर में राइट-क्लिक नहीं कर रहा था। तो जब एंड्रॉइड स्टूडियो मेरे लिए एआईडीएल फ़ोल्डर उत्पन्न करता है, तो यह गलत फ़ोल्डर का संदर्भ देगा, और मैं एक संकलन त्रुटि के साथ समाप्त होगा।मेरी इच्छा है कि एंड्रॉइड प्रलेखन ने यह स्पष्ट कर दिया है कि एआईडीएल फाइलें उत्पन्न करने से पहले हमें उचित फ़ोल्डर में राइट-क्लिक करने की आवश्यकता है। मुझे पता है, यह मूर्खतापूर्ण लगता है, लेकिन मुझे आशा है कि यह उत्तर आप में से कुछ पर लागू होगा!

+0

नहीं, यह काम नहीं किया। – m0skit0

0

बस .aid फ़ाइल को .java फ़ाइल के समान होने की आवश्यकता है!

+0

यह पहले से ही एक ही नाम है। – m0skit0

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