Domanda Lint.xml diverso per diversi tipi di build in Android Studio?


Voglio usare diversi lint.xml file per pubblicazione e mettere a punto generi i tipi in Android Studio. Quindi, come può essere raggiunto?

Quando metto lint.xml in QualcheModulo / src / debug e QualcheModulo / src / release cartelle (inoltre, queste cartelle contengono solo questo lint.xml file e niente più) gradle reagisce come non ce n'è lint.xml file, se metto singolo lint.xml file nella cartella del modulo principale (someModule /) - gradle lo riconosce, ma in questo caso non posso usare impostazioni diverse a seconda del tipo di build ...


12
2018-04-30 07:32


origine


risposte:


Non l'ho provato, ma forse qualcosa del genere potrebbe aiutarti.

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

EDIT: commenti feedback:

  • task.ext.xxxx è uno spazio dei nomi personalizzato che puoi usare: vedi https://docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html
  • "lintXmlFileName" è un nome composto. Non troverai documenti a riguardo.
  • in android {... lintOptions {... lintConfig file ("lint.xml")}} devi leggere "lintXmlFileName" usando ".ext.get (" lintXmlFileName ")" e impostarlo per "lintConfig file () "
  • Non l'ho provato, ma presumo che "whenTaskAdded" non sia "android" nel build.gradle dell'app.

4
2018-01-14 14:56



Ecco cosa ha funzionato per me:

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

Nel mio caso avevo bisogno di accendere abortOnError per il rilascio costruisco in modo che possa svilupparmi liberamente, ma prendo rapidamente gli errori di filatura sul mio CI (se scivolano).


2
2018-05-02 16:07



Questo è un riepilogo della guida al nuovo sistema di build di Android studio, supporto pelucchi.

Supporto pelucchi

A partire dalla versione 0.7.0, è possibile eseguire lint per una variante specifica o per tutte le varianti, nel qual caso produce un rapporto che descrive a quali varianti specifiche si applica un determinato problema.

Puoi configurare lint aggiungendo una sezione lintOptions come segue. In genere specifichi solo alcuni di questi; questa sezione mostra tutte le opzioni disponibili.

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

}

EDIT: aggiungi l'esempio reale e fattibile

Come tutti sappiamo, il nuovo sistema di build Android si basa sul gradle. Il componente principale del sistema di generazione gradle è task. Ci sono diverse attività di lanci se il progetto ha una variante di costruzione diversa. È possibile ottenere tali compiti da Android Studio All task listo dalla riga di comando ./gradlew tasks. Un esempio mostra come segue, due sapori di build demo e 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

Queste attività di sfilacciamento dipendono da altre attività, qui diciamo preBuild.

Prima di eseguire l'attività lint, eseguirà l'attività preBuild in primo luogo. L'obiettivo preBuild è un'attività già esistente, ma possiamo manipolare questa attività predefinita e aggiungere più azioni a questa attività. androide lintOptions la proprietà verrà aggiunta e modificata dinamicamente in base a diverse varianti di build come il seguente codice dimostra nel file 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...
}

Per eseguire correttamente il codice sopra riportato, il file di configurazione del lint corrispondente deve essere presente nella directory dell'app.


-1
2018-01-19 02:17