2014-04-30 4 views
11

मैं रिहाई और एंड्रॉयड स्टूडियो में डिबग प्रकार के निर्माण के लिए अलग lint.xml फ़ाइलों का उपयोग करना चाहते हैं। तो, यह कैसे हासिल किया जा सकता है?अलग lint.xml?

जब मैं someModule में lint.xml जगह/src/डिबग और someModule/src/ फ़ोल्डरों जारी Gradle के रूप में प्रतिक्रिया करता है (यह भी, इन फ़ोल्डरों ही नहीं lint.xml फ़ाइल और ज्यादा कुछ नहीं होता है) कोई भी lint.xml फ़ाइल नहीं है, यदि मैं कोर मॉड्यूल फ़ोल्डर (कुछ मॉड्यूल /) के तहत एकल lint.xml फ़ाइल डालता हूं - ग्रेडल इसे पहचानता है, लेकिन इस मामले में मैं बिल्ड प्रकार के आधार पर अलग-अलग सेटिंग्स का उपयोग नहीं कर सकता। ..

+0

क्या होगा यदि आप एक ऐसा फ़ंक्शन लिखते हैं जो अनचाहे 'lint.xml' फ़ाइलों को गतिशील रूप से नामित करता है, केवल उस स्वाद के लिए जिसे आप चाहते हैं? – Sebastiano

+0

मैं किसी भी प्रकार के समाधान के लिए खुला हूं। फाइल सिस्टम हेरफेर सहित। – Christ

+0

क्या आपको अंततः इसका समाधान मिला? – DataGraham

उत्तर

2

मैंने कोशिश नहीं की, लेकिन शायद somethin जी इस तरह आपकी मदद कर सकता है।

tasks.whenTaskAdded { task -> 
    if (task.name == 'lintDebug') { 
     task.ext.lintXmlFileName = "lint-debug.xml" 
    } else if (task.name == 'lintDemo') { 
     task.ext.lintXmlFileName = "lint-demo.xml" 
    } 
} 

संपादित करें: टिप्पणियाँ प्रतिक्रिया:

  • task.ext.xxxx आप उपयोग करना के लिए कस्टम नाम की जगह है: देखने https://docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html
  • "lintXmlFileName" एक बना हुआ नाम है। आपको इसके बारे में डॉक्टर नहीं मिलेगा।
  • एंड्रॉइड में {... lintOptions {... lintConfig फ़ाइल ("lint.xml")}} आपको ".ext.get (" lintXmlFileName ")" का उपयोग करके "lintXmlFileName" पढ़ने की आवश्यकता है और इसे "lintConfig" के लिए सेट करें फ़ाइल() "
  • मैंने इसका परीक्षण नहीं किया, लेकिन मुझे लगता है कि" कब टास्कएड "आपके ऐप के निर्माण में" एंड्रॉइड "के बाहर जाता है .gradle।
+1

मैंने इस समाधान की कोशिश की, लेकिन मैं इसे काम करने में सक्षम नहीं था। यह स्क्रिप्ट build.gradle फ़ाइल के भीतर कहां जाना चाहिए? शीर्ष-स्तर पर या "एंड्रॉइड" के भीतर? क्या यह सब कुछ है, या क्या आपको एंड्रॉइड {lintOptions {}} के तहत कुछ खास करने की ज़रूरत है? मुझे "lintXmlFileName" संपत्ति के लिए कोई दस्तावेज नहीं मिल रहा है। – DataGraham

-1

यह एंड्रॉइड स्टूडियो नई बिल्ड सिस्टम गाइड, lint support से सारांश है।

एक प्रकार का वृक्ष समर्थन

संस्करण 0.7.0 के रूप में, आप फाहा के लिए एक विशिष्ट प्रकार चला सकते हैं, या सभी वेरिएंट, जिस स्थिति में यह एक रिपोर्ट जो जो विशिष्ट वर्णन करता है उत्पादन के लिए एक दिया वेरिएंट मुद्दा पर लागू होता है।

आप निम्न जैसे लिंटऑप्शन अनुभाग जोड़कर लिंट को कॉन्फ़िगर कर सकते हैं। आप आमतौर पर केवल इनमें से कुछ निर्दिष्ट करते हैं; यह अनुभाग सभी उपलब्ध विकल्पों को दिखाता है।

android { 

    lintOptions { 

     // set to true to turn off analysis progress reporting by lint 
     quiet true 
     // if true, stop the gradle build if errors are found 
     abortOnError false 
     // if true, only report errors 
     ignoreWarnings true 
     // if true, emit full/absolute paths to files with errors (true by default) 
     //absolutePaths true 
     // if true, check all issues, including those that are off by default 
     checkAllWarnings true 
     // if true, treat all warnings as errors 
     warningsAsErrors true 
     // turn off checking the given issue id's 
     disable 'TypographyFractions','TypographyQuotes' 
     // turn on the given issue id's 
     enable 'RtlHardcoded','RtlCompat', 'RtlEnabled' 
     // check *only* the given issue id's 
     check 'NewApi', 'InlinedApi' 
     // if true, don't include source code lines in the error output 
     noLines true 
     // if true, show all locations for an error, do not truncate lists, etc. 
     showAll true 
     // Fallback lint configuration (default severities, etc.) 
     lintConfig file("default-lint.xml") 
     // if true, generate a text report of issues (false by default) 
     textReport true 
     // location to write the output; can be a file or 'stdout' 
     textOutput 'stdout' 
     // if true, generate an XML report for use by for example Jenkins 
     xmlReport false 
     // file to write report to (if not specified, defaults to lint-results.xml) 
     xmlOutput file("lint-report.xml") 
     // if true, generate an HTML report (with issue explanations, sourcecode, etc) 
     htmlReport true 
     // optional path to report (default will be lint-results.html in the builddir) 
     htmlOutput file("lint-report.html") 

     // set to true to have all release builds run lint on issues with severity=fatal 

     // and abort the build (controlled by abortOnError above) if fatal issues are found 

     checkReleaseBuilds true 

     // Set the severity of the given issues to fatal (which means they will be 
     // checked during release builds (even if the lint target is not included) 
     fatal 'NewApi', 'InlineApi' 
     // Set the severity of the given issues to error 
     error 'Wakelock', 'TextViewEdits' 
     // Set the severity of the given issues to warning 
     warning 'ResourceAsColor' 
     // Set the severity of the given issues to ignore (same as disabling the check) 
     ignore 'TypographyQuotes' 
    } 

} 

संपादित करें: वास्तविक और व्यावहारिक उदाहरण

जोड़ने हम सभी जानते हैं, नए Android निर्माण प्रणाली Gradle पर आधारित है। ग्रेडल बिल्ड सिस्टम का मुख्य घटक task है। यदि आपके पास प्रोजेक्ट के अलग-अलग संस्करण हैं तो अलग-अलग लिंट कार्य हैं। आप एंड्रॉइड स्टूडियो All task list, या कमांडलाइन ./gradlew tasks से उन कार्यों को प्राप्त कर सकते हैं। उदाहरण के रूप में एक उदाहरण दिखाता है, दो बिल्ड स्वाद demo और full

lint - Runs lint on all variants. 
lintDemoDebug - Runs lint on the DemoDebug build 
lintDemoRelease - Runs lint on the DemoRelease build 
lintFullDebug - Runs lint on the FullDebug build 
lintFullRelease - Runs lint on the FullRelease build 

ये फाहा कार्य अन्य कार्यों पर निर्भरता कर रहे हैं, यहाँ मान लीजिए कि preBuild करते हैं।

लिंट कार्य चलाने से पहले, यह कार्य preBuild को पहले चलाएगा। कार्य preBuild एक पहले से ही मौजूदा कार्य है, लेकिन हम इस पूर्व परिभाषित कार्य में हेरफेर कर सकते हैं और इस कार्य में अधिक क्रिया जोड़ सकते हैं। एंड्रॉइड lintOptions संपत्ति को विभिन्न निर्माण प्रकारों के आधार पर गतिशील रूप से जोड़ा जाएगा और संशोधित किया जाएगा क्योंकि निम्नलिखित कोड फ़ाइल app/build.gradle में प्रदर्शित होता है।

preBuild.doFirst { 
android.applicationVariants.each { variant -> 
    if (variant.name == 'demoDebug') { 
     println variant.name 
     android.lintOptions.quiet = true 
     android.lintOptions.lintConfig = new File('app/lint_demo_debug.xml') 
     // you can add more properties 
    } else if (variant.name == 'fullDebug') { 
     println variant.name 
     android.lintOptions.quiet = false 
     android.lintOptions.lintConfig = new File('app/lint_full_debug.xml') 
     // you can add more properties 
    } // more variants... 
} 

सफलतापूर्वक ऊपर कोड चलाने के लिए, संबंधित लिंट कॉन्फ़िगरेशन फ़ाइल ऐप निर्देशिका के अंतर्गत मौजूद होना चाहिए।

+0

धन्यवाद, मैंने यह दस्तावेज देखा है। लेकिन यह हमें बिल्ड टाइप टाइप करने के लिए अलग lint.xml फ़ाइल रखने में कैसे मदद करता है? – Christ

+3

मुझे नहीं लगता कि यह काम करता है। यह सभी प्रकारों पर पुनरावृत्त होता है, और हर बार जब यह वैश्विक कॉन्फ़िगरेशन सेट करता है, तो जो भी संस्करण आखिरी बार आता है, वे विकल्प वैश्विक स्तर पर सेट किए जाएंगे। – DataGraham

+0

आप सही हैं, यह अभी पिछले संस्करण का मूल्य रखेंगे, मैं यह कैसे किया के लिए मेरा उत्तर देखें। – TheHebrewHammer

0

यहाँ क्या मेरे लिए काम किया है:

tasks.whenTaskAdded { task -> 
    if (task.name.startsWith("lint")) { 
     if (task.name.toLowerCase().endsWith("release")) { 
      task.doFirst { 
       android.lintOptions.abortOnError = true 
      } 
     } else { 
      task.doFirst { 
       android.lintOptions.abortOnError = false 
      } 
     } 
    } 
} 

मेरे मामले में मैं रिहाई के लिए abortOnError को चालू करने की जरूरत है बनाता है, ताकि मैं स्वतंत्र रूप से विकसित कर सकते हैं, लेकिन मेरे सीआई पर जल्दी पकड़ फाहा त्रुटियों (अगर वे फिसल गया)।

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