{"id":13608858,"url":"https://github.com/cioccarellia/lib-template-android","last_synced_at":"2026-05-08T22:32:32.776Z","repository":{"id":144472343,"uuid":"341271367","full_name":"cioccarellia/lib-template-android","owner":"cioccarellia","description":"Android Kotlin Library Template","archived":false,"fork":false,"pushed_at":"2022-12-29T12:05:54.000Z","size":4718,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-02T22:42:59.977Z","etag":null,"topics":["android","kotlin","library","template"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cioccarellia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2021-02-22T16:53:55.000Z","updated_at":"2023-10-14T11:01:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"93241b0b-a25b-4cc9-a958-c3428627a61c","html_url":"https://github.com/cioccarellia/lib-template-android","commit_stats":null,"previous_names":[],"tags_count":1,"template":true,"template_full_name":null,"purl":"pkg:github/cioccarellia/lib-template-android","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cioccarellia%2Flib-template-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cioccarellia%2Flib-template-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cioccarellia%2Flib-template-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cioccarellia%2Flib-template-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cioccarellia","download_url":"https://codeload.github.com/cioccarellia/lib-template-android/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cioccarellia%2Flib-template-android/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32800084,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"ssl_error","status_checked_at":"2026-05-08T08:22:45.650Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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","kotlin","library","template"],"created_at":"2024-08-01T19:01:30.533Z","updated_at":"2026-05-08T22:32:32.761Z","avatar_url":"https://github.com/cioccarellia.png","language":"Kotlin","funding_links":[],"categories":["Kotlin"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://app.codacy.com/manual/lib-template-android/dashboard\"\u003e\u003cimg src=\"https://app.codacy.com/project/badge/Grade/1ba2dd5e557849ab98ad6d564cfadc11\" alt=\"Codacy\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://kotlinlang.org/docs/releases.html\"\u003e\u003cimg src=\"https://img.shields.io/badge/kotlin-1.6.10-orange.svg\" alt=\"Kotlin\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://gradle.org/releases\"\u003e\u003cimg src=\"https://img.shields.io/badge/gradle-7.4.1-102f39.svg\" alt=\"Gradle version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://source.android.com/setup/start/build-numbers\"\u003e\u003cimg src=\"https://img.shields.io/badge/min-15-00e676.svg\" alt=\"Android Min Sdk\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://source.android.com/setup/start/build-numbers\"\u003e\u003cimg src=\"https://img.shields.io/badge/compile-31-00e676.svg\" alt=\"Android Compile Version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/cioccarellia/lib-template-android/blob/master/LICENSE.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-blue.svg\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# lib-template-android\nThis project is meant to be a complete yet minimal template to create new android libraries from scratch.\n\nIt is a modular and functional baseline to build a library from, instead of starting from square one and investing time adjusting all the minor details and options (the main objective is to give a ready-to-code project, so that you can focus on the project itself instead of its infrastructure).\n\nIt comes preconfigured with **multi module support** (`complex_numbers` is meant to be the library, and `sample` the attached application), **testing** (Already configured on both modules), custom **Android Studio configurations** (AAR builds, signing, deployment, updates, testing and remote actions), **MavenCentral deployment utilities** and **github workflows** out of the box.\n\nIn order to keep the project simple, there is really *nothing* inside it, it is strictly gradle, vcs, deploying, scripting and testing structure, which should encompass your library's/application's code.\n\nThe project contains 3 modules:\n- `complex_numbers`: This is the library module. It implements [Complex Numbers](https://en.wikipedia.org/wiki/Complex_number) as a showcase. This is the module that should eventually be deployed.\n- `sample`: This is a blank Android app (it depends directly on `:complex_numbers`), ideally for prototyping/emulation purposes.\n- `buildSrc`: This module contains shared gradle configuration files, and can be customized to fit your needs.\n\n# Versions and Specifications\nThe project depends on gradle 7.4.1.\nYou need JDK Version 11 (\u003e=) to build and use this project.\nIt targets java version 8.\n\n# Setup\nImport the project in Android Studio and let it sync and build.\n\nThere will be a few TODOs scattered throughout the project for things you should be modifying/adding/deleting.\n\nFirst thing first, you want to be renaming `:complex_numbers` to your library name. To achieve this, follow these 5 steps:\n1. Rename `complex_numbers` occurrences in gradle files (namely in `sample/build.gradle`, `complex_numbers/build.gradle`, and optionally in `publish_mavencentral.gradle`). \n   Run a *Find In Files* search for \"complex_numbers\" if you want to automate this. Leave it as it is inside `settings.gradle`;\n2. Rename `complex_numbers` occurrences in github workflow files (namely in `.github/workflows/push_tests.yaml`);\n3. Rename the library module. This can be done via Right click on the module name -\u003e Refactor -\u003e Rename -\u003e Rename Module, or from the Project Structure UI;\n4. Rename `complex_numbers` occurrences in `settings.gradle`;\n5. Refactor package names, copyright \u0026 comments to match your library/author.\n\nRepeat the process for the `:sample` module if necessary.\n\nCreate more library/app modules if necessary, by copying the already existing ones.\n\nAt this point you have the template up and running, ready to be worked on. \n\nIt is recommended to run `dependencyUpdates` to check what is updated and what not (Gradle version, plugin, kotlin version and dependencies).\n\n# Github Workflows\nThe project contains 3 github workflows.\n- Build \u0026 APK generation on push \u0026 pull_request [on by default]\n- Test execution on push \u0026 pull_request [on by default]\n- Publishing on MavenCentral on release creation [off by default]\n\n# Deploying\nIf you intend to deploy your library to MavenCentral (assuming your accounts and GPG keys are correctly configured, more (required to understand) detail in the guides below) you can do it in two different ways:\n- Via local commands (the project is equipped with a dependency to deploy AARs). The Gradle task is called `publishReleasePublicationToSonatypeRepository`. \n  Your data in this case has to be filled in `local.properties`, to be kept off vcs, and it naturally must match your publication data for the deployment to work.\n    ```\n    signing.keyId=                # Your GPG Key ID\n    signing.password=             # Your Key Passphrase\n    signing.secretKeyRingFile=    # Your GPG Key file path\n    ossrhUsername=                # Account Username\n    ossrhPassword=                # Account Password\n    sonatypeStagingProfileId=     # These two should match, they are your reporitory's profileId.\n    stagingProfileId=             # These two should match, they are your reporitory's profileId.\n    ```\n\n\n- Via github workflows on releases. You create secrets on your repository for each one of these entries, which will be used by the workflow under `.github/workflows_disabled/publish.yaml` (Has to be moved to `workflows`) to esecute the deployment.\n    ```\n    OSSRH_USERNAME                # Account Username\n    OSSRH_PASSWORD                # Account Password\n    SIGNING_KEY_ID                # Your GPG Key ID\n    SIGNING_PASSWORD              # Your Key Passphrase\n    SIGNING_SECRET_KEY_RING_FILE  # Your GPG Key file path\n    SONATYPE_STAGING_PROFILE_ID   # These two should match, they are your reporitory's profileId.\n    ```\n\nThe deployment utility which comes with the project works with serial 1-module deployment (publishes only one module at a time). \nThis means that if you have multiple modules, you can:\n- Create and customize different publishing gradle files (like `scripts/publishing/publish_mavencentral.gradle`), one for each module;\n- Manually change parameters on that one file, and run one publishing operation for each module.\n\n## Sources\nThis template is available and would not be possible without the hard work of:\n- @zsmb13 (https://getstream.io/blog/publishing-libraries-to-mavencentral-2021)\n- @GetStream (https://github.com/GetStream/stream-chat-android)\n- @afollestad (https://github.com/afollestad/library-template-android)\n\n## Recommended reads\n- [Organizing Gradle Projects](https://docs.gradle.org/current/userguide/organizing_gradle_projects.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcioccarellia%2Flib-template-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcioccarellia%2Flib-template-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcioccarellia%2Flib-template-android/lists"}