2013-07-22 8 views
5

मैं सोच रहा था कि एंड्रॉइड संसाधन पहचान प्रणाली कैसे काम करती है।एंड्रॉइड में संसाधन पहचानकर्ता मान कैसे निर्धारित किए जाते हैं?

तो, मेरे पास "उदाहरण" के साथ एक एक्सएमएल लेआउट फ़ाइल है (उदाहरण के लिए)। मेरे जावा कोड में, यह R.layout.example को कॉल करके पहचाना जाता है जो एक पूर्णांक देता है।

मैं क्या सोच रहा था कि यह पूर्णांक कैसे निर्धारित किया गया था, और फिर एक पूर्णांक मान को किसी संसाधन को पहचानने और खोजने के लिए उपयोग किया जाता है।

धन्यवाद!

उत्तर

3

प्रोजेक्ट के gen फ़ोल्डर में R.java नामक जेनरेट की गई फ़ाइल में पूर्णांक संग्रहीत किए जाते हैं। हाल ही में एक काम में प्रगति मेरा से एक नमूना है:

public final class R { 
public static final class attr { 
} 
public static final class drawable { 
    public static final int cot_logo=0x7f020000; 
    public static final int cot_logo_small=0x7f020001; 
    public static final int ic_launcher=0x7f020002; 
    public static final int icon=0x7f020003; 
} 
public static final class id { 
    public static final int password=0x7f060001; 
    public static final int username=0x7f060000; 
} 
public static final class layout { 
    public static final int login_dlg=0x7f030000; 
    public static final int main=0x7f030001; 
} 
public static final class string { 
    public static final int app_name=0x7f050000; 
} 
public static final class xml { 
    public static final int config=0x7f040000; 
} 

}

जैसा कि आप देख सकते हैं, वहाँ वे कैसे उत्पन्न कर रहे हैं करने के लिए एक पैटर्न है। संसाधन की प्रत्येक श्रेणी को अपना क्षेत्रफल के साथ काम करने के लिए दिया जाता है।

ध्यान देने योग्य एक और बात यह है कि वे एक्सएमएल/फ़ोल्डर/आदि में सामने आने वाले क्रम में उत्पन्न होते हैं। इसलिए, उदाहरण के लिए, यदि आप एक्सएमएल में कुछ विचारों को स्थानांतरित करते हैं, तो आपको पूर्ण R.java फ़ाइल को पुन: उत्पन्न करने के लिए अपनी परियोजना को साफ करने की आवश्यकता होगी। अन्यथा, पूर्णांक मैपिंग गलत हो जाएगा और आप कम से कम ClassCastException, या अप्रत्याशित व्यवहार के साथ (अधिकतर संभावना) समाप्त हो जाएंगे।

0

को समझने के लिए कैसे उन संख्याओं को उत्पन्न कर रहे हैं आप पता लगाने के लिए aapt काम करता है क्योंकि उस उपकरण R.java पैदा करने के लिए जिम्मेदार है की आवश्यकता होगी। आप एंड्रॉइड रिपोजिटरी क्लोन कर सकते हैं और एपेट सोर्स कोड देख सकते हैं लेकिन यह काफी जटिल है (कम से कम मेरे लिए)।

आप, कोड को देखने के प्रथम स्रोत क्लोन करने के लिए करना चाहते हैं:

git clone "https://android.googlesource.com/platform/sdk" 

फिर src/com/android/ide/eclipse/adt/internal/build पर जाएँ, यह वह जगह है जहां aapt संबंधित स्रोत हैं।

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