{"id":17966180,"url":"https://github.com/frap129/android-app-template","last_synced_at":"2025-03-25T07:31:25.420Z","repository":{"id":259496274,"uuid":"860057439","full_name":"frap129/android-app-template","owner":"frap129","description":"A template repo for modern Android development","archived":false,"fork":false,"pushed_at":"2024-10-24T17:13:36.000Z","size":467,"stargazers_count":33,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-26T00:52:38.683Z","etag":null,"topics":["android","android-application","dokka","jetpack-compose","kotlin-android","template","template-project"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/frap129.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-09-19T18:36:27.000Z","updated_at":"2024-10-24T17:13:40.000Z","dependencies_parsed_at":"2024-10-26T09:06:19.282Z","dependency_job_id":null,"html_url":"https://github.com/frap129/android-app-template","commit_stats":null,"previous_names":["frap129/android-app-template"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frap129%2Fandroid-app-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frap129%2Fandroid-app-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frap129%2Fandroid-app-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frap129%2Fandroid-app-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frap129","download_url":"https://codeload.github.com/frap129/android-app-template/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222052531,"owners_count":16922720,"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","android-application","dokka","jetpack-compose","kotlin-android","template","template-project"],"created_at":"2024-10-29T13:08:06.807Z","updated_at":"2024-10-29T13:08:11.228Z","avatar_url":"https://github.com/frap129.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Android App Template\nA starting point for creating a new android app repo, with many tools and patterns for modern\nAndroid development already implemented, such as:\n\n- Compose\n- Jetpack Navigation\n\t- Made more modular using\n[Destinations](core/ui/src/main/java/core/ui/model/data/Destination.kt)\n\t- Deep link support\n- Koin dependency injection\n- ktlint and EditorConfig for code style\n    - Idea/Studio run configurations for checking and autoformat included\n- Timber for logging\n- Multi-module project structure\n- Dokka for documentation generation\n    - Idea/Studio run configuration for generating docs included\n- Gradle convention plugins to simplify creating new:\n\t- App modules\n\t- Library modules\n\t- Modules with Compose \n- Dynamic signing configuration\n\nAnd more to come\n\n## Getting Started\n\n### Commit Format\nThis repo follows the [ConventionalCommits](https://www.conventionalcommits.org/en/v1.0.0/#specification)\nv1.0.0 specification for commit formatting. For cleanliness, ease of reading, and easy changelog\ngeneration, it is recommended that you maintain this after starting a new project with this\ntemplate.\n\n### Module Structure\nThis template uses a multi-module structure to encourage separation of different components.\n\n#### app\nThe \"app\" module is included as a starting point for your new app. After cloning this template, the\nfirst thing you should do is change the package name to a more suitable one. \n- Open `app/build.gradle` and change the namespace and applicationId \n- Move `MainActivity.kt` to a path that matches your package name\n\nWhen using this template, the App module should only contain your activity class and a list of\n`destinations`, screens that are registered as navigable routes. All app functionality should be\nimplemented in `feature` modules.\n\n#### build-logic\nThe `build-logic` directory is for code that is used in building your app, not a part of the\napp itself.\n\n##### convention\nThe `build-logic:convention` module provides a set of gradle plugins that simplify creating new\nmodules. These include plugins for creating new:\n- Application Modules\n- Library Modules\n- Test Modules\n- Compose Modules\n\nThese plugins can be combined to suit your needs, which the exception that a module can only be an\napplication or a library, not both. For example, if you are creating a new `core` module that has\ntests for its functionality, the `build.gradle` would look something\nlike:\n```kotlin\nplugins {\n    alias(libs.plugins.modular.android.library)\n    alias(libs.plugins.modular.android.test)\n}\n\nandroid {\n    namespace = \"core.my-module\"\n}\n```\nNo further configuration is necessary, unless there are any external dependencies that are needed.\n\n#### core\nThe `core` directory holds modules that provide functionality that can be reused across multiple\nmodules. This includes things like repositories, API accessors, and common Composables.\n\n##### lifecycle\nThe `core:lifecycle` module holds lifecycle-related components that can be used or referenced across\nmultiple app modules or features. By default this includes:\n- `MainApplication`, the common `Application` class used across app modules, which holds:\n  - Timber Tree configuration\n  - Koin Dependency registration\n- `TemplateActivity`, an open implementation of `ComponentActivity` that supports:\n  - :aunching to a deep-linked route\n\n##### ui\nThe 'core:ui' module is a module used for common UI definitions throughout the app, such as the\ntheme, ui-related constants, an common composables. It also includes the `Destination` class, which\nallows for modular registration of navigable routes. If you end up modifying `Destination` to\nsupport a Jetpack Navigation feature that is not currently supported, consider contributing it back\nto this template.\n\n##### util\nThe `core:util` module is empty, but is meant for statically defined functions and one-offs used\nin other modules.\n\n#### feature\nThe `feature` directory holds modules that implement \"features\". In the context of this template, a\nfeature refers to a user-facing screen, set of related screens, or a user flow. Each feature should\ndefine one `destination`, which is the entry point for navigating to that feature in app. Features\ncan navigate between one another, but should not have any build time dependency on one another. For\ncleanliness, `feature` modules should only depend on `core` modules and external libraries.\n\n### Dynamic Signing Configuration\nThis template supports providing custom signing config(s) via the `keystore.properties` pattern. If\n`keystore.properties` exists in the root of the project, the values defined in it will be used for\nthe app module's signing config(s), otherwise the default is used.\n\n`keystore.properties` supports both a singular signing config, and per-variant signing configs. As\nan example, the following `keystore.properties` uses the generic config for all variants except\nrelease, which has its own signing config defines.\n```\nstorePassword=example\nkeyPassword=example\nkeyAlias=example\nstoreFile=example.keystore\n\nrelease.storePassword=example\nrelease.keyPassword=example\nrelease.keyAlias=example\nrelease.storeFile=release.keystore\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrap129%2Fandroid-app-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrap129%2Fandroid-app-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrap129%2Fandroid-app-template/lists"}