{"id":22707510,"url":"https://github.com/xvik/gradle-animalsniffer-plugin","last_synced_at":"2025-04-05T04:10:42.669Z","repository":{"id":3057748,"uuid":"48316525","full_name":"xvik/gradle-animalsniffer-plugin","owner":"xvik","description":"Gradle AnimalSniffer plugin","archived":false,"fork":false,"pushed_at":"2025-03-25T01:05:09.000Z","size":2218,"stargazers_count":54,"open_issues_count":2,"forks_count":9,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-29T03:06:26.852Z","etag":null,"topics":["android","animalsniffer","gradle","gradle-plugin","kotlin"],"latest_commit_sha":null,"homepage":"http://xvik.github.io/gradle-animalsniffer-plugin/","language":"Groovy","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xvik.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-12-20T10:52:05.000Z","updated_at":"2025-02-24T09:50:45.000Z","dependencies_parsed_at":"2023-11-13T09:25:40.174Z","dependency_job_id":"ffb0b1e9-6b7e-4112-8803-d573d14a39a7","html_url":"https://github.com/xvik/gradle-animalsniffer-plugin","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xvik%2Fgradle-animalsniffer-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xvik%2Fgradle-animalsniffer-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xvik%2Fgradle-animalsniffer-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xvik%2Fgradle-animalsniffer-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xvik","download_url":"https://codeload.github.com/xvik/gradle-animalsniffer-plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247284949,"owners_count":20913704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","animalsniffer","gradle","gradle-plugin","kotlin"],"created_at":"2024-12-10T10:13:13.822Z","updated_at":"2025-04-05T04:10:42.647Z","avatar_url":"https://github.com/xvik.png","language":"Groovy","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gradle-animalsniffer-plugin\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](http://www.opensource.org/licenses/MIT)\n[![CI](https://github.com/xvik/gradle-animalsniffer-plugin/actions/workflows/CI.yml/badge.svg)](https://github.com/xvik/gradle-animalsniffer-plugin/actions/workflows/CI.yml)\n[![Appveyor build status](https://ci.appveyor.com/api/projects/status/github/xvik/gradle-animalsniffer-plugin?svg=true)](https://ci.appveyor.com/project/xvik/gradle-animalsniffer-plugin)\n[![codecov](https://codecov.io/gh/xvik/gradle-animalsniffer-plugin/branch/master/graph/badge.svg)](https://codecov.io/gh/xvik/gradle-animalsniffer-plugin)\n\n**DOCUMENTATION** https://xvik.github.io/gradle-animalsniffer-plugin\n\n### About\n\nUse [AnimalSniffer](http://www.mojohaus.org/animal-sniffer/) signatures to check (JDK, android SDK or any library) API compatibility\nfor **java** (**kotlin**, **scala**, **groovy** etc.), **android** and **kotlin multiplatform** projects.\n\nGeneral tool: signatures could be created for any library to check api compatibility against older library versions.\nAndroid community [adopted it](https://github.com/open-toast/gummy-bears) for android SDK compatibility verification.\n\nEasy way to **check android SDK compatibility for java library**.\n\n**NOTE**: Initially, animalsniffer was created for java compatibility checks, but java signatures \nfor JDK 9+ are [not published](https://github.com/mojohaus/animal-sniffer/issues/62) due to module nature: use \n[--release flag](https://docs.gradle.org/current/userguide/building_java_projects.html#sec:compiling_with_release)\nto check JDK 9+ backwards compatibility\n\n```groovy\ncompileJava {\n  options.release = 11\n}\n```\n\nFeatures:\n\n* Works with:\n  - Java (and related) plugins: **java** (java-library), **kotlin**, **groovy** (only with `@CompileStatic`), **scala**,\n    or any other jvm language (which plugin use sourceSets)\n  - **Android** projects (library and application plugins)\n  - **Kotlin multiplatform** projects\n* Could create signatures for [your](https://xvik.github.io/gradle-animalsniffer-plugin/latest/guide/signature/build) or any \n[3rd party](https://xvik.github.io/gradle-animalsniffer-plugin/latest/guide/signature/library)\n  library (to check compatibility against the older library version)\n* Special task to [view signature](https://xvik.github.io/gradle-animalsniffer-plugin/latest/guide/view) file contents\n* [Report](https://xvik.github.io/gradle-animalsniffer-plugin/latest/guide/report) errors to console (to simplify reaction), text file and CSV (for external tools)\n* Could merge existing signatures (e.g. for [caching](https://xvik.github.io/gradle-animalsniffer-plugin/latest/guide/performance))\n* Compatible with gradle configuration cache (gradle 9+ requirement)\n* [Debug](https://xvik.github.io/gradle-animalsniffer-plugin/latest/guide/debug/debug) tools to learn or check configuration\n\nUsed by:\n\n* [Mockito](https://github.com/mockito/mockito/blob/main/buildSrc/src/main/kotlin/mockito.java-backward-compatibility-checks-conventions.gradle.kts#L27) for java and android compatibility checks\n* [Okhttp](https://github.com/square/okhttp/blob/master/okhttp/build.gradle.kts#L254) for java and android compatibility checks (using kotlin multiplatform)\n* [Open-telemetry](https://github.com/open-telemetry/opentelemetry-java/blob/main/buildSrc/src/main/kotlin/otel.animalsniffer-conventions.gradle.kts#L10)\n  for android compatibility checks (with custom (gammy-bears based) [signatures generation](https://github.com/open-telemetry/opentelemetry-java/blob/main/animal-sniffer-signature/build.gradle.kts))\n\n##### Summary\n\n* Configuration extensions: \n    - `animalsniffer` - check configuration\n    - `animalsnifferSignature` - signature [build configuration](https://xvik.github.io/gradle-animalsniffer-plugin/latest/guide/signature/build) (optional)\n* Tasks:\n    - `animalsniffer[Target]` - check \"[target]\" sources (source set, android variant or kotlin platform) \n    - `animalsnifferSignature` - build signature (active when `animalsnifferSignature` configuration declared)\n    - `printAnimalsnifferTasks` - print registered check tasks\n    - `printAnimalsnifferSourceInfo` - print defailed project sources and compile tasks info (for debug reports)\n    - `type:BuildSignatureTask` - custom signature build task may be used to [merge signatures](https://xvik.github.io/gradle-animalsniffer-plugin/latest/guide/signature/library)\n    - `type:SignatureInfoTask` - view signature [\"contents\"](https://xvik.github.io/gradle-animalsniffer-plugin/latest/guide/view/)  \n* Dependencies configuration: `signature` - signatures for check    \n\n### Setup\n\n[![Maven Central](https://img.shields.io/maven-central/v/ru.vyarus/gradle-animalsniffer-plugin.svg)](https://maven-badges.herokuapp.com/maven-central/ru.vyarus/gradle-animalsniffer-plugin)\n[![Gradle Plugin Portal](https://img.shields.io/maven-metadata/v/https/plugins.gradle.org/m2/ru/vyarus/animalsniffer/ru.vyarus.animalsniffer.gradle.plugin/maven-metadata.xml.svg?colorB=007ec6\u0026label=plugins%20portal)](https://plugins.gradle.org/plugin/ru.vyarus.animalsniffer)\n\n\n```groovy\nbuildscript {\n    repositories {\n        mavenCentral()\n    }\n    dependencies {\n        classpath 'ru.vyarus:gradle-animalsniffer-plugin:2.0.0'\n    }\n}\napply plugin: 'ru.vyarus.animalsniffer'\n```\n\nOR \n\n```groovy\nplugins {\n    id 'ru.vyarus.animalsniffer' version '2.0.0'\n}\n```\n\n#### Compatibility\n\nPlugin only works with plugins:\n\n* Jvm languages: `java-base` plugin (activated by any java-related plugin like `java`, `java-library`, `groovy`, `scala`, `org.jetbrains.kotlin.jvm`, etc.).\n* Android: `com.android.library` or `com.android.application` plugins (required `7.4.0` or greater)\n* Kotlin Multiplatform: `org.jetbrains.kotlin.multiplatform` plugin (required `1.7` or greater).\n\n\nThe plugin is compiled for Java 8 and tested for compatibility with Java 11, 17 and 21.\n\nGradle | Version\n--------|-------\n7-8     | [2.0.0](https://xvik.github.io/gradle-animalsniffer-plugin/2.0.0) \n5       | [1.7.2](https://github.com/xvik/gradle-animalsniffer-plugin/tree/1.7.2)\n4.x     | [1.4.6](https://github.com/xvik/gradle-animalsniffer-plugin/tree/1.4.6)\n\n#### Snapshots\n\n\u003cdetails\u003e\n      \u003csummary\u003eSnapshots may be used through JitPack or GitHub packages\u003c/summary\u003e\n\n##### GitHub package\n\nWARNING: Accessing GitHub package requires [GitHub authorization](https://docs.github.com/en/enterprise-cloud@latest/packages/working-with-a-github-packages-registry/working-with-the-gradle-registry#authenticating-to-github-packages)!\n\nAccess token creation is [described here](https://blog.vyarus.ru/using-github-packages-in-gradle-and-maven-projects)\n\n* Add to `settings.gradle` (top most!) (exact commit hash might be used as version) :\n\n  ```groovy\n  pluginManagement {\n      repositories {\n          gradlePluginPortal()      \n          maven { \n              url = 'https://maven.pkg.github.com/xvik/gradle-animalsniffer-plugin'\n              credentials {\n                 username = settings.ext.find('gpr.user') ?: System.getenv(\"USERNAME\")\n                 password = settings.ext.find('gpr.key') ?: System.getenv(\"TOKEN\")\n            } \n          }             \n      }\n  }    \n  ```   \n* In global gradle file `~/.gradle/gradle.properties` add\n  ```\n  gpr.user=\u003cyour github user name\u003e\n  gpr.key=\u003cyour github password or classic token\u003e\n  ```                                            \n  (or credentials must be declared in environment: USERNAME/TOKEN (more usable for CI))\n  Read [personal access tokens creation guide](https://docs.github.com/en/enterprise-cloud@latest/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic)\n  Note that token needs only \"package/read\" permission \n* Use plugin snapshot (see [the latest published package version](https://github.com/xvik/gradle-animalsniffer-plugin/packages/2339003)):\n\n  ```groovy\n  plugins {\n      id 'ru.vyarus.animalsniffer' version '2.0.1-SNAPSHOT'\n  }\n  ```  \n\n##### JitPack\n\n* Add to `settings.gradle` (top most!) (exact commit hash might be used as version) :\n\n  ```groovy\n  pluginManagement {\n      resolutionStrategy {\n          eachPlugin {\n              if (requested.id.id == 'ru.vyarus.use-python') {\n                  useModule('ru.vyarus:gradle-animalsniffer-plugin:master-SNAPSHOT')\n              }\n          }\n      }\n      repositories {\n          gradlePluginPortal()      \n          maven { url 'https://jitpack.io' }              \n      }\n  }    \n  ```  \n  Note: this would use the latest snapshot. To use exact commit version, go to\n  [JitPack project page](https://jitpack.io/#ru.vyarus/gradle-animalsniffer-plugin)\n* Use plugin without declaring version:\n\n  ```groovy\n  plugins {\n      id 'ru.vyarus.animalsniffer'\n  }\n  ```\n\n\u003c/details\u003e\n\n\n### Usage\n\nRead [documentation](https://xvik.github.io/gradle-animalsniffer-plugin/)\n\n### Example projects\n\nCheck:\n\n* [Java](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/java) (including android signatures)\n* [Groovy](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/groovy)\n* [Kotlin](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/kotlin)\n* [Scala](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/scala)\n* [Android library](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/android-lib)\n* [Android application](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/android-app)\n* [Multiplatform](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/kotlin-multiplatform)\n* [Multiplatform + android](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/android-kotlin-multiplatform)\n\nSignature build:\n\n* [Classes](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/buildSignatire/fromClasses) - signature from project classes\n* [Jars](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/buildSignatire/fromJars) - signature from project jars (configuration)\n* [Signatures](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/buildSignatire/fromSignatures) - signature from other signatures\n* [Mixed](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/buildSignatire/fromMix) - signature from different sources\n\nFull android and multiplatform projects (created with android studio and kotlin init site):\n\n* [Android](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/standalone/android-simple) - complete android project\n* [Multiplatform: android only](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/standalone/kotlin-multi-android-only) - 1 multiplatform target\n* [Multiplatform: android, desktop, server](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/standalone/kotlin-multi-android-desktop-server) - several multiplatform targets\n* [Multiplatform: desktop, server](https://github.com/xvik/gradle-animalsniffer-plugin/tree/master/examples/standalone/kotlin-multi-desktop-server) - 2 targets, without android\n\n\n### Might also like\n\n* [quality-plugin](https://github.com/xvik/gradle-quality-plugin) - java and groovy source quality checks\n* [mkdocs-plugin](https://github.com/xvik/gradle-mkdocs-plugin) - project documentation generator\n* [pom-plugin](https://github.com/xvik/gradle-pom-plugin) - improves pom generation\n* [java-lib-plugin](https://github.com/xvik/gradle-java-lib-plugin) - avoid boilerplate for java or groovy library project\n* [github-info-plugin](https://github.com/xvik/gradle-github-info-plugin) - pre-configure common plugins with github related info\n* [java-library generator](https://github.com/xvik/generator-lib-java) - java library project generator\n\n---\n[![gradle plugin generator](http://img.shields.io/badge/Powered%20by-%20Gradle%20plugin%20generator-green.svg?style=flat-square)](https://github.com/xvik/generator-gradle-plugin) \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxvik%2Fgradle-animalsniffer-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxvik%2Fgradle-animalsniffer-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxvik%2Fgradle-animalsniffer-plugin/lists"}