গ্রেড বিল্ড লিন্ট টাস্কে ব্যর্থ হয়


96

আমার কাছে একটি সাধারণ অ্যান্ড্রয়েড প্রকল্প রয়েছে যা আমি অ্যান্ড্রয়েড স্টুডিও 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.

সম্ভবত আমি কিছু মিস করছি, তবে টার্মিনালে প্রকল্পটি তৈরি করতে সক্ষম না হওয়ায় অ্যান্ড্রয়েড প্রকল্পের সিআইয়ের সম্ভাবনা রোধ করে।

যেকোনো সাহায্যই অসাধারণ.

উত্তর:


143

0.7.0 এর সাথে লিন্টের জন্য বর্ধিত সমর্থন পাওয়া যায়, তবে এটি সর্বদা সঠিকভাবে কাজ করে না। (যেমন: বাটারনিফ লাইব্রেরি)

সলিউশন হ'ল পাওয়া লিন্টের ত্রুটিগুলিতে বিলম্ব বাতিল করা নিষ্ক্রিয় করা

আমি https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7 থেকে অনুপ্রেরণা নিয়েছি

(বাস্তবায়ন: https://android.googlesource.com/platform/tools/base/+/e6a5b9c7c1bca4da402de442315b5ff1ada819c7/build-s systemm/ gradle/ src/ main/ groovy/ com/ android/ build/ gradle/ intern/ modelDef/ jodia/ model/ ef )

(আলোচনা: 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
  }
}

এবং যদি আপনার কেবলমাত্র নির্দিষ্ট লিন্টের নিয়মটি অক্ষম করার এবং অন্যকে বিল্ডটি ব্যর্থ করে রাখা দরকার তবে এটি ব্যবহার করুন:

/*
 * 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'
কলিন

মূল বিল্ড.gradle থেকে এটি করার কোনও উপায় আছে যাতে আমাকে বিভিন্ন সাবমডিউলের একটি গুচ্ছ কাঁটাতে না হয়?
অঙ্কুশ

4
@ অঙ্কুশ গুপ্ত আপনি android{}অবশ্যই এটির মূল ব্লকে রাখতে পারেন
মারেক সেবেরা

@ মেরেকসেবেরা আপনার কাছে বেশ কয়েকটি অ্যান্ড্রয়েড লাইব্রেরি এবং অ্যান্ড্রয়েড অ্যাপ্লিকেশন থাকলে তা কি কাজ করে? আমি এটি কাজ করতে পেলাম না। আপনি কিভাবে একটি উদাহরণ দেখাতে পারেন?
রাইপার

@ বৃহত্তর গ্রন্থাগারগুলিতে এটি স্থাপন করা প্রয়োজন হতে পারে lintOptionsতবে এটি কাজ করা উচিত যদি আপনি এটি রুট androidব্লকে রেখে দেন, আলাদা প্রশ্ন তৈরি করার চেষ্টা করুন, যদি এটি কোনওভাবে আপনার পক্ষে কাজ করে না।
মারেক সেবেরা

53

যদি abortOnError falseআপনার সমস্যার সমাধান না করে, আপনি এটি চেষ্টা করতে পারেন।

lintOptions {
    checkReleaseBuilds false
}

4
ধন্যবাদ, আমার দিন সংরক্ষিত যখন সঙ্গে সংকলন gradle-retrolambdaএবং project-lombokরিলিজে
জেসন Sparc

38

আপনি এখান থেকে উপযুক্ত বিকল্প নির্বাচন করতে পারেন

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

4
আপনি যদি সত্যিই লিন্ট (ভাল) ব্যবহার করতে চান তবে এটি আমার মনে হয় সেরা পথ
Ccero Moura

15

অ্যান্ড্রয়েড স্টুডিওতে আমার কিছু লিঙ্ক ত্রুটি ছিল যা কেবল তখনই ঘটে যখন আমি একটি স্বাক্ষরিত APK তৈরি করি।

এটি এড়াতে, আমি নিম্নলিখিতগুলিতে যুক্ত করেছিলাম build.gradle

android {
    lintOptions {
        checkReleaseBuilds false
    }
}

11

আপনার বিল্ড.gradle ফাইলটিতে এই লাইনগুলি যুক্ত করুন:

android { 
  lintOptions { 
    abortOnError false 
  }
}

তারপরে আপনার প্রকল্পটি পরিষ্কার করুন: ডি


8

আপনি যদি "abortInError মিথ্যা" বিকল্পটি এড়াতে চান তবে বিল্ড / লিন্ট-ফলাফল-রিলিজ-ফ্যাটাল এইচটিএমএল ফাইলটি একবার দেখুন। লিন্ট দ্বারা সনাক্ত করা এরোরগুলি এখানে।

আমি আশা করি এটি কারও সাহায্য করতে পারে!


4
প্রকৃতপক্ষে ভাল পরামর্শ, কেবল একটি নোট, সমস্ত ত্রুটিগুলি ম্যানুয়ালি সংশোধনযোগ্য নয় (যেমন অনুপস্থিত প্যাকেজ javax.*)
মেরেক সেবেরা

4

অ্যান্ড্রয়েড স্টুডিও v1.2 এ এটি কীভাবে ঠিক করবেন তা আপনাকে বলে:

এখানে চিত্র বর্ণনা লিখুন


3

অ্যান্ড্রয়েড স্টুডিও সংস্করণ 0.51 এ একই ত্রুটি পেয়েছে

বিল্ড ঠিকঠাক কাজ করছিল এবং হঠাৎ, কেবলমাত্র সংস্করণ কোডের মান পরিবর্তন করার পরে, আমি একটি লিঙ্ক সম্পর্কিত বিল্ড ত্রুটি পেয়েছি।

পরিবর্তনের চেষ্টা করা হয়েছে build.gradle, অ্যান্ড্রয়েড স্টুডিও ক্যাশে সাফ করে পুনরায় চালু করা হয়েছে, তবে কোনও পরিবর্তন হয়নি।

অবশেষে আমি মূল কোডে ফিরে (ত্রুটি ঘটাচ্ছে), এবং মুছে android:debuggable="false"থেকে AndroidManifest.xml, বিল্ড সফল হতে সৃষ্টি হয়।

আমি এটি আবার যুক্ত করেছি এবং এটি এখনও কার্যকর হয় ... আমাকে কেন জিজ্ঞাসা করবেন না: এস


3

আমার হিসাবে এটি আপনার সমস্যার একটি খারাপ এবং দ্রুত সমাধান:

android { 
  lintOptions { 
    abortOnError false 
  }
}

আরও ভাল সমাধান আপনার কোডটিতে সমস্যা করছে, কারণ লিঙ্ক টুলটি আপনার অ্যান্ড্রয়েড প্রকল্পের উত্স ফাইলগুলি যথাযথতা, সুরক্ষা, কার্য সম্পাদন, ব্যবহারযোগ্যতা, অ্যাক্সেসযোগ্যতা এবং আন্তর্জাতিককরণের জন্য সম্ভাব্য বাগ এবং অপ্টিমাইজেশনের উন্নতির জন্য পরীক্ষা করে।

এই সমস্যাটি প্রায়শই ঘটে যখন:

  • লেআউটে অমীমাংসিত চিহ্ন বা কিছু গুণাবলী অনুপস্থিত অন্তর্ভুক্ত
  • অন্যান্য কাঠামোগত সমস্যাগুলি, যেমন প্রত্যাখ্যানযোগ্য উপাদান বা API কলগুলি যা টার্গেট এপিআই সংস্করণ দ্বারা সমর্থিত নয়, কোড সঠিকভাবে চালাতে ব্যর্থ হতে পারে।

Inspect Codeঅ্যান্ড্রয়েড স্টুডিওতে আপনার বাগগুলি সন্ধান করুন : লিন্টের সাহায্যে আপনার কোডটি উন্নত করুন


4
একটি খারাপ এবং দ্রুত সমাধানের বিপরীত নির্দেশ করার জন্য ধন্যবাদ । লিঙ্কটি উপলভ্য রিপোর্টটিতে আমি প্রচুর সমস্যা আবিষ্কার করেছি Application/build/reports/lint-results.html। রিপোর্টটি খুব বিশদ এবং সহায়ক।
jgrocha

1

অ্যাড

android.lintOptions.abortOnError false

আপনার অ্যাপ্লিকেশন \ build.gradle


4
আমার সন্দেহ হয় ওপি এর কাজ সম্পর্কে সামান্য ব্যাখ্যা চাই।
স্নাইপার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.