Skip to content

Check android project

For android project (com.android.library or com.android.application plugins version 7.4.0 or above) animalsniffer tasks created for variants and test components.

Example:

plugins {
    id 'com.android.application' version '7.4.0' // or recent 8.x
    id 'ru.vyarus.animalsniffer' version "2.0.0"
}

android { ... }

dependencies {
    signature 'net.sf.androidscents.signature:android-api-level-21:5.0.1_r2@signature'
}

Part of print sources task output:

== [SourceSets] ===============================================================

    Android application Source Sets ------------------------------------------------------ (12)

        androidTest ----- (consumed by test component debugAndroidTest)
            src/androidTest/java                                                             NOT EXISTS
            src/androidTest/kotlin                                                           NOT EXISTS

        androidTestDebug ----- (consumed by test component debugAndroidTest)
            src/androidTestDebug/java                                                        NOT EXISTS
            src/androidTestDebug/kotlin                                                      NOT EXISTS

        androidTestRelease -----
            src/androidTestRelease/java                                                      NOT EXISTS
            src/androidTestRelease/kotlin                                                    NOT EXISTS

        debug ----- (consumed by variant debug)
            src/debug/java                                                                   NOT EXISTS
            src/debug/kotlin                                                                 NOT EXISTS

        main ----- (consumed by variant release)
            src/main/java
            src/main/kotlin                                                                  NOT EXISTS

        release ----- (consumed by variant release)
            src/release/java                                                                 NOT EXISTS
            src/release/kotlin                                                               NOT EXISTS

        test ----- (consumed by unit test component releaseUnitTest)
            src/test/java                                                                    NOT EXISTS
            src/test/kotlin                                                                  NOT EXISTS

        testDebug ----- (consumed by unit test component debugUnitTest)
            src/testDebug/java                                                               NOT EXISTS
            src/testDebug/kotlin                                                             NOT EXISTS

        testFixtures -----
            src/testFixtures/java                                                            NOT EXISTS
            src/testFixtures/kotlin                                                          NOT EXISTS

        testFixturesDebug -----
            src/testFixturesDebug/java                                                       NOT EXISTS
            src/testFixturesDebug/kotlin                                                     NOT EXISTS

        testFixturesRelease -----
            src/testFixturesRelease/java                                                     NOT EXISTS
            src/testFixturesRelease/kotlin                                                   NOT EXISTS

        testRelease ----- (consumed by unit test component releaseUnitTest)
            src/testRelease/java                                                             NOT EXISTS
            src/testRelease/kotlin                                                           NOT EXISTS

== [Android Variants] ========================================================== (5)

    debug ===== (compiled by compileDebugJavaWithJavac task)

        Source sets (2)

            main -----
                src/main/java
                src/main/kotlin                                                                  NOT EXISTS

            debug -----
                src/debug/java                                                                   NOT EXISTS
                src/debug/kotlin                                                                 NOT EXISTS

    release ===== (compiled by compileReleaseJavaWithJavac task)

        Source sets (2)

            main -----
                src/main/java
                src/main/kotlin                                                                  NOT EXISTS

            release -----
                src/release/java                                                                 NOT EXISTS
                src/release/kotlin                                                               NOT EXISTS

    debugAndroidTest ===== (compiled by compileDebugAndroidTestJavaWithJavac task)

        Source sets (2)

            androidTest -----
                src/androidTest/java                                                             NOT EXISTS
                src/androidTest/kotlin                                                           NOT EXISTS

            androidTestDebug -----
                src/androidTestDebug/java                                                        NOT EXISTS
                src/androidTestDebug/kotlin                                                      NOT EXISTS

    debugUnitTest ===== (compiled by compileDebugUnitTestJavaWithJavac task)

        Source sets (2)

            test -----
                src/test/java                                                                    NOT EXISTS
                src/test/kotlin                                                                  NOT EXISTS

            testDebug -----
                src/testDebug/java                                                               NOT EXISTS
                src/testDebug/kotlin                                                             NOT EXISTS

    releaseUnitTest ===== (compiled by compileReleaseUnitTestJavaWithJavac task)

        Source sets (2)

            test -----
                src/test/java                                                                    NOT EXISTS
                src/test/kotlin                                                                  NOT EXISTS

            testRelease -----
                src/testRelease/java                                                             NOT EXISTS
                src/testRelease/kotlin                                                           NOT EXISTS

Important

Fixture sources aren't covered by variants (will not be checked).

In the example above, we have 2 variants and 3 test components: 'debug', 'release', 'debugAndroidTest', 'debugUnitTest' and 'releaseUnitTest'. So the following animalsniffer tasks would be created: animalsnifferDebug, animalsnifferRelease, animalsnifferDebugAndroidTest, animalsnifferDebugUnitTest and animalsnifferReleaseUnitTest

This could also be seen with print animalsniffer tasks task:

> Task :printAnimalsnifferTasks


    animalsnifferDebug                  [default]       for 'debug' android variant
        report: build/reports/animalsniffer/debug.text
        depends on: debugAnimalsnifferClassesCollector
        signatures: 
            android-api-level-21-5.0.1_r2.signature
        classes:
            build/intermediates/javac/debug/classes
        sources:
            build/generated/aidl_source_output_dir/debug/out                                 NOT EXISTS
            build/generated/renderscript_source_output_dir/debug/out                         NOT EXISTS
            build/generated/source/buildConfig/debug
            src/debug/java                                                                   NOT EXISTS
            src/debug/kotlin                                                                 NOT EXISTS
            src/main/java
            src/main/kotlin                                                                  NOT EXISTS


    animalsnifferDebugAndroidTest                       for 'debugAndroidTest' android test component
        report: build/reports/animalsniffer/debugAndroidTest.text
        depends on: debugAndroidTestAnimalsnifferClassesCollector
        signatures: 
            android-api-level-21-5.0.1_r2.signature
        classes:
            build/intermediates/javac/debugAndroidTest/classes
        sources:
            build/generated/aidl_source_output_dir/debugAndroidTest/out                      NOT EXISTS
            build/generated/renderscript_source_output_dir/debugAndroidTest/out              NOT EXISTS
            build/generated/source/buildConfig/androidTest/debug
            src/androidTest/java                                                             NOT EXISTS
            src/androidTest/kotlin                                                           NOT EXISTS
            src/androidTestDebug/java                                                        NOT EXISTS
            src/androidTestDebug/kotlin                                                      NOT EXISTS


    animalsnifferDebugUnitTest                          for 'debugUnitTest' android test component
        report: build/reports/animalsniffer/debugUnitTest.text
        depends on: debugUnitTestAnimalsnifferClassesCollector
        signatures: 
            android-api-level-21-5.0.1_r2.signature
        classes:
            <empty>
        sources:
            src/test/java                                                                    NOT EXISTS
            src/test/kotlin                                                                  NOT EXISTS
            src/testDebug/java                                                               NOT EXISTS
            src/testDebug/kotlin                                                             NOT EXISTS


    animalsnifferRelease                [default]       for 'release' android variant
        report: build/reports/animalsniffer/release.text
        depends on: releaseAnimalsnifferClassesCollector
        signatures: 
            android-api-level-21-5.0.1_r2.signature
        classes:
            build/intermediates/javac/release/classes
        sources:
            build/generated/aidl_source_output_dir/release/out                               NOT EXISTS
            build/generated/renderscript_source_output_dir/release/out                       NOT EXISTS
            build/generated/source/buildConfig/release
            src/main/java
            src/main/kotlin                                                                  NOT EXISTS
            src/release/java                                                                 NOT EXISTS
            src/release/kotlin                                                               NOT EXISTS


    animalsnifferReleaseUnitTest                        for 'releaseUnitTest' android test component
        report: build/reports/animalsniffer/releaseUnitTest.text
        depends on: releaseUnitTestAnimalsnifferClassesCollector
        signatures: 
            android-api-level-21-5.0.1_r2.signature
        classes:
            <empty>
        sources:
            src/test/java                                                                    NOT EXISTS
            src/test/kotlin                                                                  NOT EXISTS
            src/testRelease/java                                                             NOT EXISTS
            src/testRelease/kotlin                                                           NOT EXISTS

Note

[default] indicates tasks executed with build

Tip

Use animalsniffer.debug = true to see class files, checked by animalsniffer task

Changing default tasks

In many android projects, debug and release variants contain the same sources, so it makes sense to run only one check during the build:

animalsniffer {
    defaultTargets = ['debug']
}

or with method

animalsniffer {
    defaultTargets 'debug'
}

Tip

If you want to avoid all animalsniffer tasks:

defaultTargets = []

Test tasks

Test sources are not checked by default. If you want to check test sources:

animalsniffer {
    checkTestSources = true
}

After that defaultTargets option could be used to limit test tasks.

Support specifics

New android api requires a task to get access to android sources location (android plugin configures task - no way to just get required information).

That's why additional tasks registered only for collecting android configuration: debugAnimalsnifferClassesCollector, releaseAnimalsnifferClassesCollector, debugAndroidTestAnimalsnifferClassesCollector etc.

These tasks do nothing - they just receive required configurations to be used in animalsniffer task.