2011-11-10 9 views
7

समय के साथ हमारे एंड्रॉइड प्रोजेक्ट ने एक बड़ा सौदा किया है, और इन दिनों हम एक ही स्रोत पेड़ से कई ब्रांडेड एपीके बना रहे हैं। एंड्रॉइड की पैकेज नामकरण आवश्यकताओं के कारण यह चुनौतीपूर्ण हो गया है।निर्माण के दौरान एंड्रॉइड लाइब्रेरी कस्टम विशेषताओं और पैकेज नाम रीमेपिंग को कैसे हल करें?

हमारे पास एंड्रॉइड लाइब्रेरी प्रोजेक्ट में हमारे सभी साझा कोड हैं, जो मुख्य एप्लिकेशन प्रोजेक्ट में शामिल हैं। इसके अलावा हमारे पास ब्रांडेड संसाधनों के लिए एंड्रॉइड लाइब्रेरी 'ओवरले' है जो प्रत्येक ब्रांड के लिए लागू होती है। जब हम एक ब्रांड बनाना चाहते हैं, तो हम उस ब्रांड के लिए कुछ अतिरिक्त गुण शामिल करते हैं जो मुख्य साझा कोड एंड्रॉइड लाइब्रेरी से पहले 'ओवरले' एंड्रॉइड लाइब्रेरी समेत समाप्त होता है। इसे समझने के लिए:

AppProject 
    Include: BrandALibrary or BrandBLibrary 
    Include: SharedLibrary 

SharedLibrary 
-> src/.. 
-> res/.. 
BrandALibrary 
-> res/.. 
BrandBLibrary 
-> res/.. 

'BrandALibrary या BrandBLibrary', का निर्माण समय में स्विच कर दिया गया कमांड लाइन स्विच का उपयोग कर निर्माण समय में .properties फ़ाइलों सहित द्वारा। वहां कुछ भी फैंसी नहीं है। बिल्ड स्क्रिप्ट को बिल्ड समय पर .एपीके के पैकेज नाम को भी बदलना चाहिए ताकि दोनों .एपीके फाइलें एक ही समय में एक दिए गए डिवाइस पर सह-अस्तित्व में रह सकें (ज्यादातर क्यूए उद्देश्यों के लिए, क्योंकि हम ग्राहकों से दोनों की अपेक्षा नहीं करते हैं एक ही समय ... हालांकि वे कर सकते थे)।

सब कुछ हमारे काम कोड लाइब्रेरी प्रोजेक्ट में कक्षा जोड़ने के बाद आज टूटने तक बहुत अच्छी तरह से काम कर रहा था।

http://devmaze.wordpress.com/2011/05/22/the-case-of-android-libraries-and-custom-xml-attributes-part-2/

हमारे निर्माण के दौरान: एक कारण है कि इस ocurring है मैं निम्नलिखित वेब पेज, जहां साथी ही समस्या का सामना करना पड़ा था और aapt के बारे में उनकी संस्करण तय था इस काम करने के लिए पर ठोकर खाई के लिए चारों ओर देख में , निम्न त्रुटियों लॉग में प्रस्तुत कर रहे हैं:

-pre-build: 

-code-gen: 
    [echo] ---------- 
    [echo] Handling aidl files... 
    [aidl] No aidl files to compile. 
    [echo] ---------- 
    [echo] Handling RenderScript files... 
[renderscript] No renderscript files to compile. 
    [echo] ---------- 
    [echo] Handling Resources... 
    [aapt] Found Deleted Target File 
    [aapt] Generating resource IDs... 
    [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\layout\fancy_layout.xml:22: error: No resource identifier found for attribute 'state_add' in package 'com.myapp' 
    [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\layout\fancy_layout.xml:22: error: No resource identifier found for attribute 'state_list' in package 'com.myapp' 
    [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector.xml:4: error: No resource identifier found for attribute 'state_add' in package 'com.myapp' 
    [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector.xml:4: error: No resource 
identifier found for attribute 'state_list' in package 'com.myapp' 
    [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector.xml:5: error: No resource 
identifier found for attribute 'state_add' in package 'com.myapp' 
    [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector_button_selector.xml:5: error: No resource identifier found for attribute 'state_list' in package 'com.myapp' 

BUILD FAILED 
C:\android-sdk\tools\ant\build.xml:539: The following error occurred while executing this line: 
C:\android-sdk\tools\ant\build.xml:568: null returned: 1 

मेरे कस्टम विशेषताओं कुछ भी नहीं शानदार, मैं एक state_add मिल गया है रहे हैं, और state_list परिभाषित है कि मैं एक नियंत्रण है कि एक बटन से पता चलता के लिए डिफ़ॉल्ट राज्यों सेट करने के लिए उपयोग कर सकते हैं एक आइकन के साथ जो इंगित करता है कि कौन से राज्य दिखाना चाहिए। यह एक तरह से 'टॉगल' बटन की तरह है, और मैं इसके बजाय एक टॉगल बटन के साथ इस नियंत्रण को बदल सकता हूं।

मैंने this tutorial का पालन किया जब मैंने यह बटन बनाया।

मेरा प्रश्न है, आखिर में (यह आदमी लंबे समय तक घुमाया गया है?), यह सुनिश्चित करने का एक तरीका है कि एपेट कस्टम विशेषताओं में उपयोग किए गए पैकेज नामों को 'रीमेप' करेगा। मैं भी हमारे पुस्तकालय में अधिक कस्टम नियंत्रण लिखना चाहते हैं, तो हम appt जरूरत है सक्षम होने के लिए होगा निम्न करने के लिए: एक कस्टम नाम स्थान पुस्तकालय परियोजना में परिभाषित किया गया है

  • हैं, का नाम स्थान के लिए है कि नाम स्थान पुन: मैप एंड्रॉइड एप्लिकेशन बनाया जा रहा है।

क्या मुझे एंट बिल्ड के दौरान कस्टम विशेषताओं को मैप किए जाने के तरीके से कुछ मौलिक याद आ रही है? क्या मेरे निर्माण के मुद्दों को ठीक करने के लिए मैं कुछ सरल कर सकता हूं?

+0

यह मुद्दा जाना जाता है। यहां बग स्थिति है: http://code.google.com/p/android/issues/detail?id=9656 इसे तारांकित करें। हम तेजी से ठीक हो जाएंगे। :-) –

+0

धन्यवाद एंड्रज। मैंने ऐसा किया है। इस बीच मैंने कोड को हटा दिया है जिसे मैंने ऐसा करने के लिए उपयोग किया था और एक टॉगल बटन का उपयोग करके बस उसी स्थिति को प्राप्त करने के लिए कोड में उचित रूप से अपने चेक किए गए राज्य में हेरफेर कर रहा है।यह दुखद है जब ऐसा कुछ काम नहीं करता है क्योंकि ढांचा खुद ही संभावना को हरा देता है। –

उत्तर

19

यह was solved

उदाहरण के लिए:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res-auto" > 
... 
+0

इससे बहुत मदद मिली। धन्यवाद! –

+3

एक और अच्छा संदर्भ आलेख: एंड्रॉइड लाइब्रेरीज़ और कस्टम एक्सएमएल विशेषताओं का मामला (भाग 2) http://devmaze.wordpress.com/2011/05/22/the-case-of-android- पुस्तकालय-and-custom-xml -attributes-भाग -2 / – Noah

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

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