एक प्रकार का वृक्ष निर्माण एक प्रकार का वृक्ष कार्य पर विफल रहता है


95

मेरे पास एक सरल एंड्रॉइड प्रोजेक्ट है जिसे मैंने एंड्रॉइड स्टूडियो 0.4.0 के साथ बनाया है। मैं ग्रेड 1.9 और ग्रैडल एंड्रॉइड प्लगइन 0.7 का उपयोग करता हूं। कल मैंने जेक व्हार्टन की बटरकनीफ़ लाइब्रेरी को अपने ग्रेडेल बिल्ड स्क्रिप्ट में जोड़ा है :

dependencies {
            compile 'com.android.support:support-v4:19.0.0'
            compile 'com.android.support:appcompat-v7:19.0.0'

            // Butterknife
            compile 'com.jakewharton:butterknife:4.0.1'
}

जब मैं एंड्रॉइड स्टूडियो से एप्लिकेशन चलाता हूं, तो बिल्ड ठीक चलता है और मेरे उपकरणों पर सही तरीके से निष्पादित होता है। लेकिन जब मैं (कमांड लाइन से) कोशिश करता हूं gradle buildतो बिल्ड विफल हो जाता है। यहाँ मेरी लिंट रिपोर्ट से एक हिस्सा है:

InvalidPackage: Package not included in Android

/home/yami/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/4.0.1/f43b36925363701633d01adb8e54df7150397a78/butterknife-4.0.1.jar: Invalid package reference in library; not included in Android: javax.annotation.processing. Referenced from butterknife.internal.InjectViewProcessor.
/home/yami/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/4.0.1/f43b36925363701633d01adb8e54df7150397a78/butterknife-4.0.1.jar: Invalid package reference in library; not included in Android: javax.annotation.processing. Referenced from butterknife.internal.InjectViewProcessor.
/home/yami/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/4.0.1/f43b36925363701633d01adb8e54df7150397a78/butterknife-4.0.1.jar: Invalid package reference in library; not included in Android: javax.annotation.processing. Referenced from butterknife.internal.InjectViewProcessor.
/home/yami/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/4.0.1/f43b36925363701633d01adb8e54df7150397a78/butterknife-4.0.1.jar: Invalid package reference in library; not included in Android: javax.annotation.processing. Referenced from butterknife.internal.InjectViewProcessor.
/home/yami/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/4.0.1/f43b36925363701633d01adb8e54df7150397a78/butterknife-4.0.1.jar: Invalid package reference in library; not included in Android: javax.annotation.processing. Referenced from butterknife.internal.InjectViewProcessor.

शायद मैं कुछ याद कर रहा हूं, लेकिन टर्मिनल में परियोजना का निर्माण करने में सक्षम नहीं होने के कारण एंड्रॉइड परियोजनाओं के लिए CI की संभावना को रोकता है।

कोई भी मदद बहुत अच्छी रहेगी।

जवाबों:


143

0.7.0 के साथ , लिंट के लिए विस्तारित समर्थन आता है, हालांकि, यह हमेशा ठीक से काम नहीं करता है। (उदा। तितलियों का पुस्तकालय)

समाधान पाया लिंट त्रुटियों पर aborting बिल्ड को अक्षम करने के लिए है

मैंने https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7 से प्रेरणा ली

(कार्यान्वयन: https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7/build-system/gradle/src/main/groovy/com/android/build/internal/internal/mternal/mternal )

(चर्चा: https://plus.google.com/+AndroidDevelopers/posts/ersS6fMLxw1 )

android {
  // your build config
  defaultConfig { ... }
  signingConfigs { ... }
  compileOptions { ... }
  buildTypes { ... }
  // This is important, it will run lint checks but won't abort build
  lintOptions {
      abortOnError false
  }
}

और यदि आपको केवल विशेष Lint नियम को अक्षम करना है और बिल्ड को दूसरों पर विफल रखना है, तो इसका उपयोग करें:

/*
 * Use only 'disable' or only 'enable', those configurations exclude each other
 */
android {
  lintOptions {
    // use this line to check all rules except those listed
    disable 'RuleToDisable', 'SecondRuleToDisable'
    // use this line to check just listed rules
    enable 'FirstRuleToCheck', 'LastRuleToCheck'
  }
}

19
यदि आप चाहते हैं कि आप केवल पैकेज चेक को निष्क्रिय कर सकते हैंdisable 'InvalidPackage'
Calin

क्या रूट बिल्ड.ग्रेड से ऐसा करने का कोई तरीका है ताकि मुझे विभिन्न सबमॉड्यूल्स का एक गुच्छा फोर्क न करना पड़े?
अंकुशग

2
@ अश्कुषगुप्ता आप इसे रूट android{}ब्लॉक में रख सकते हैं
मर्क सेबेरा

@MarekSebera क्या आपके पास एंड्रॉइड लाइब्रेरी और एंड्रॉइड एप्लिकेशन के कई नंबर हैं? मुझे यह काम करने के लिए नहीं मिला। क्या आप इस पर एक उदाहरण दिखा सकते हैं?
राइपर

@ lintOptionsपुस्तकालयों में डालने के लिए आवश्यक हो सकता है , लेकिन यह काम करना चाहिए यदि आप इसे रूट androidब्लॉक में डालते हैं , तो अलग प्रश्न बनाने की कोशिश करें, अगर यह आपके लिए किसी तरह काम नहीं करता है।
मर्क सेबेरा

53

अगर abortOnError falseआपकी समस्या का समाधान नहीं होगा, तो आप यह कोशिश कर सकते हैं।

lintOptions {
    checkReleaseBuilds false
}

1
धन्यवाद, मेरा दिन बचाया जब gradle-retrolambdaऔर साथ project-lombokमें जारी
जेसन स्पार्क

37

आप यहां से उचित विकल्प चुन सकते हैं

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'
    }
}

यदि आप वास्तव में एक प्रकार का वृक्ष (अच्छा) का उपयोग करना चाहते हैं, तो मुझे लगता है कि सबसे अच्छा रास्ता है
Cícero Moura

15

एंड्रॉइड स्टूडियो में मुझे कुछ लिंट त्रुटियां थीं जो केवल तब हुईं जब मैंने एक हस्ताक्षरित एपीके बनाया।

इससे बचने के लिए, मैंने निम्नलिखित को जोड़ा build.gradle

android {
    lintOptions {
        checkReleaseBuilds false
    }
}


8

यदि आप "abortInError false" विकल्प से बचना चाहते हैं, तो बिल्ड / लिंट-रिजल्ट-रिलीज़-फ़्रीस्टीन फ़ाइल पर एक नज़र डालें। यहाँ लिंट द्वारा इरोज़ का पता लगाया गया है।

मुझे आशा है कि यह किसी की मदद कर सकता है!


1
वास्तव में अच्छा सुझाव, सिर्फ एक नोट, सभी त्रुटियां मैन्युअल रूप से javax.*
सुधारात्मक

4

Android Studio v1.2 में, यह आपको बताता है कि इसे कैसे ठीक किया जाए:

यहां छवि विवरण दर्ज करें


3

AndroidStudio संस्करण 0.51 पर समान त्रुटि मिली

बिल्ड ठीक काम कर रहा था और अचानक, केवल संस्करण कोड मूल्य को बदलने के बाद, मुझे लिंट से संबंधित बिल्ड त्रुटि मिली।

बदलने की कोशिश की build.gradle, AndroidStudio कैश और पुनरारंभ को साफ़ कर दिया, लेकिन कोई परिवर्तन नहीं।

अंत में मैं मूल कोड पर लौट आया (त्रुटि के कारण), और इससे हटा दिया android:debuggable="false"गया AndroidManifest.xml, जिससे बिल्ड सफल हो गया।

मैंने इसे फिर से जोड़ा और यह अभी भी काम करता है ... मुझसे मत पूछो क्यों: एस


3

मेरे लिए, यह आपकी समस्या का एक बुरा और त्वरित समाधान है:

android { 
  lintOptions { 
    abortOnError false 
  }
}

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

यह समस्या अक्सर तब होती है जब:

  • लेआउट में अनसुलझे प्रतीक शामिल हैं या कुछ विशेषता गायब है
  • अन्य संरचनात्मक मुद्दे, जैसे कि अपग्रेड किए गए तत्वों का उपयोग या एपीआई कॉल जो लक्ष्य एपीआई संस्करणों द्वारा समर्थित नहीं हैं, कोड को सही ढंग से चलाने में विफल हो सकते हैं।

Inspect Codeएंड्रॉइड स्टूडियो में अपने बग खोजें : लिंट के साथ अपने कोड में सुधार करें


1
एक बुरा और त्वरित समाधान के विपरीत इंगित करने के लिए धन्यवाद । मैंने उपलब्ध लिंट द्वारा उत्पन्न रिपोर्ट पर बहुत सारे मुद्दों की खोज की है Application/build/reports/lint-results.html। रिपोर्ट बहुत विस्तृत और सहायक है।
jgrocha

1

जोड़ना

android.lintOptions.abortOnError false

अपने app \ build.gradle के लिए


1
मुझे संदेह है कि ओपी इस के कामकाज के बारे में थोड़ा स्पष्टीकरण चाहेगा।
स्नाइपर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.