2015-10-25 13 views
9

यह एक बहुत ही अजीब बात है। आज के रूप में (1.4) सही ढंग से बंद कर दिया फिर से बनाने अपने प्रोजेक्ट में डिबग apk:एक्सएमएल परिवर्तन के बाद संस्करण संस्करण के लिए एंड्रॉइड स्टूडियो स्टेल एपीके

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

मैं वास्तव में निर्माण प्रक्रिया के बारे में ज्यादा पता नहीं है, इसलिए सभी मैं कोशिश की है निर्माण फ़ोल्डर को हटाने है, पुनः आयात परियोजना और पुराने पुनः आरंभ/Android पर स्टूडियो कैश अमान्य हो जाएगा। इस अजीब व्यवहार या इसे ठीक करने का तरीका क्या हो सकता है इसके बारे में कोई सुझाव?

संपादित करें: इसके पीछे व्यवहार को पिन करना बहुत मुश्किल है - कभी-कभी मैंने देखा है कि यह लगातार कुछ निश्चित XML फ़ाइलों को प्रभावित करता है। ऐसा लगता है कि इस आदमी को एक ही मुद्दा है: मैं कुछ घंटों बिताया है खरोंच से एंड्रॉयड स्टूडियो फिर से स्थापित करने Android Studio project build issue

और मुद्दा बनी हुई है ..

उत्तर

1

मैंने वास्तव में कुछ समय पहले इस मुद्दे को समझ लिया और यह बहुत सूक्ष्म था। मेरी प्रोजेक्ट ने मुख्य स्रोत सेट के साथ-साथ प्रत्येक संस्करण के लिए एक स्रोत सेट के साथ वेरिएंट बनाये हैं। यह कुछ हद तक इस तरह परिभाषित किया गया था:

sourceSets { 

    def defaultDirectory = "src/main/" 
    def flavorADirectory = "src/flavor_a/" 

    flavor_a { 
     java.srcDirs = [defaultDirectory + 'java', flavorADirectory + 'java'] 
     res.srcDirs = [defaultDirectory + 'res', flavorADirectory + 'res'] 
     manifest.srcFile flavorADirectory + 'AndroidManifest.xml' 
    } 

    def flavorBDirectory = "src/flavor_b/" 

    flavor_b{ 
     java.srcDirs = [defaultDirectory + 'java', flavorBDirectory + 'java'] 
     res.srcDirs = [defaultDirectory + 'gift', flavorBDirectory + 'res'] 
     manifest.srcFile flavorBDirectory + 'AndroidManifest.xml' 
    } 
} 

तो वेरिएंट ठीक संकलित, लेकिन हर एक्सएमएल परिवर्तन एक पूर्ण पुनर्निर्माण ट्रिगर किया गया था। मुझे यकीन नहीं है कि इसके पीछे सटीक तर्क है, लेकिन मेरा मानना ​​है कि मुख्य sourceset को एक अलग इकाई के रूप में निर्दिष्ट किया जाना चाहिए। एंड्रॉइड स्टूडियो को main कीवर्ड देखना चाहिए और बेहतर तरीके से पता होना चाहिए कि इसके साथ क्या किया जाए। इसका मतलब है कि निर्माण संस्करण स्रोत सेट इतना की तरह निकाला जा रहा है कि के हिस्से के रूप डिफ़ॉल्ट निर्देशिका निर्दिष्ट करने के लिए कोई जरूरत नहीं है, समस्या का समाधान और कोई और अधिक स्थिर rebuilds होते हैं बनाता है:

sourceSets { 

    def defaultDirectory = "src/main/" 

    main { 
     java.srcDirs = [defaultDirectory + 'java'] 
     res.srcDirs = [defaultDirectory + 'res'] 
    } 

    def flavorADirectory = "src/flavor_a/" 

    flavor_a { 
     java.srcDirs = [flavorADirectory + 'java'] 
     res.srcDirs = [flavorADirectory + 'res'] 
     manifest.srcFile flavorADirectory + 'AndroidManifest.xml' 
    } 

    def flavorBDirectory = "src/flavor_b/" 

    flavor_b{ 
     java.srcDirs = [flavorBDirectory + 'java'] 
     res.srcDirs = [flavorBDirectory + 'res'] 
     manifest.srcFile flavorBDirectory + 'AndroidManifest.xml' 
    } 
} 
1

डैनियल, मैं निश्चित रूप से अपने आप को और साथ ही इस मुद्दे पर ध्यान दिया है। ऐसा लगता है कि कुछ बदलाव बस तब तक प्रसारित नहीं होंगे जब तक एडीबी यह नहीं पता लगाता कि ऐप वर्तमान में किसी लक्षित डिवाइस पर स्थापित नहीं है।

अस्वीकरण: यह व्यवहार की व्याख्या के बजाए एक कामकाज है, लेकिन यह मेरे लिए काम करता है। समस्या को ठीक करने के लिए, मैंने फिर से स्थापित करने से पहले पैकेज में अनइंस्टॉल करने के लिए अपने रन कॉन्फ़िगरेशन कॉन्फ़िगर किए। सावधान रहें कि एपीके को अनइंस्टॉल करने से डाटाबेस, वरीयताओं से लगातार डेटा इत्यादि जैसी चीजों को स्पष्ट रूप से प्रभावित किया जाएगा, इसलिए अगर आप विकास प्रक्रिया कर रहे हैं तो इसका उपयोग न करें।

कदम: (here से)

  1. एंड्रॉयड स्टूडियो में, भागो बटन की बाईं, और संपादित करें चुनें विन्यास को ड्रॉप डाउन सूची क्लिक करें ... Android एप्लिकेशन के अंतर्गत एप्लिकेशन पर
  2. क्लिक करें, और सामान्य टैब में, 'लॉन्च से पहले' शीर्षक ढूंढें
  3. + बटन पर क्लिक करें, बाहरी उपकरण चलाएं चुनें, पॉपअप विंडो में + बटन पर क्लिक करें।
  4. कुछ नाम दें (जैसे adb अनइंस्टॉल करें) और विवरण, और प्रोग्राम में adb टाइप करें: और पैरामीटर में uninstall <your-package-name> टाइप करें:। सुनिश्चित करें कि जब आप पॉपअप विंडो में ठीक क्लिक करते हैं तो नया आइटम चुना जाता है।

नोट: क्षेत्र (जैसे/घर/उपयोगकर्ता/एंड्रॉयड/SDK/मंच-उपकरण/एडीबी): यदि आप अपने पथ वातावरण चर में एडीबी की जरूरत नहीं है, तो कार्यक्रम में एडीबी का पूर्ण पथ दे।

दोबारा, खेद है कि यह समस्या का स्पष्टीकरण नहीं है, लेकिन यह निश्चित रूप से मेरे लिए इस मुद्दे को हल करता है।

मुझे बताएं कि यह आपके लिए कैसे काम करता है।

+0

धन्यवाद, इस तरह, हाँ कुछ मेरा एकमात्र विकल्प हो सकता है:/ –

+1

बकाया है: DI मुझे नहीं लगता कि मैं इसे उत्तर के रूप में चिह्नित कर सकता हूं क्योंकि मुझे अभी भी लगातार स्टोरेज इत्यादि तक पहुंचने की आवश्यकता है। –

+1

मैं पूरी तरह से समझता हूं। बक्षीस के लिए धन्यवाद! मैं अपनी आंखों को _actual_ समाधान के लिए छील दूंगा और अगर आप कुछ भी आते हैं तो आपको बताना होगा। – lustig

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