{"adoption": {"forks": 320, "observed_at": "2026-08-28T04:05:25.576166+00:00", "stars": 1709}, "canonical_url": "https://ross.abutalabs.com/products/androidproject-kotlin", "card": {"archived": false, "artifact_type": "framework", "description": "Android 技术中台 Kotlin 版本，但愿人长久，搬砖不再有", "domain": ["mobile-development", "android-tools", "cross-platform", "developer-tools"], "enriched": true, "function": ["web-framework", "ui-components", "state-management", "developer-tools", "boilerplate"], "health_score": 92, "homepage": null, "language": "Kotlin", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["getActivity/AndroidProject-Kotlin"], "name": "getActivity/AndroidProject-Kotlin", "platform": ["jvm"], "pushed_at": "2026-07-23T12:34:31+00:00", "repo": "getActivity/AndroidProject-Kotlin", "stars": 1709, "tags": ["android-project-template", "kotlin-boilerplate", "mvvm", "mvi", "jetpack-compose", "retrofit", "okhttp", "glide", "base-classes", "starter-template", "android", "mobile"], "topics": ["android", "kotlin", "recyclerview", "mvp", "mvvm", "dialog", "toast", "titlebar", "glide", "retrofit", "okhttp", "flutter", "baseactivity", "popupwindow", "mvi", "jetpack", "compose", "mvvmhabit"], "urls": [], "use_cases": ["start a new android app with a prebuilt architecture", "kotlin android project template with mvvm", "avoid copying old project code when creating a new app", "learn android kotlin best practices and project structure", "ready-made base activities dialogs and titlebar for android", "android app skeleton with retrofit okhttp glide integrated"], "what_it_is": "A Kotlin-based Android project template ('technology middle platform') providing a ready-made architecture with common screens, dialogs, and integrated libraries like Retrofit, OkHttp, Glide, and Jetpack components. It supports MVP, MVVM, and MVI patterns so developers can start new Android apps without rebuilding base infrastructure.", "when_to_avoid": ["you need a fully custom architecture from scratch", "your project is not Android or not Kotlin", "you want a minimal template without opinionated structure"], "when_to_choose": ["starting a new Android app in Kotlin and wanting a battle-tested architecture", "you want common UI screens, dialogs, and base classes out of the box", "you prefer MVVM/MVI patterns with Jetpack components preconfigured"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/androidproject-kotlin", "repo": "getActivity/AndroidProject-Kotlin", "role": "main", "score": 73}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:36:58.353092+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "665b0a6699f6c2fb6bd706bf74f8d4a711aca88c40450da3f5706bce02a7d3c1", "fetched_at": "2026-08-28T04:05:25.576166+00:00", "kind": "readme", "missing": false, "url": "https://github.com/getActivity/AndroidProject-Kotlin"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:36:58.353092+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "665b0a6699f6c2fb6bd706bf74f8d4a711aca88c40450da3f5706bce02a7d3c1", "fetched_at": "2026-08-28T04:05:25.576166+00:00", "kind": "readme", "missing": false, "url": "https://github.com/getActivity/AndroidProject-Kotlin"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:36:58.353092+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "665b0a6699f6c2fb6bd706bf74f8d4a711aca88c40450da3f5706bce02a7d3c1", "fetched_at": "2026-08-28T04:05:25.576166+00:00", "kind": "readme", "missing": false, "url": "https://github.com/getActivity/AndroidProject-Kotlin"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:36:58.353092+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "665b0a6699f6c2fb6bd706bf74f8d4a711aca88c40450da3f5706bce02a7d3c1", "fetched_at": "2026-08-28T04:05:25.576166+00:00", "kind": "readme", "missing": false, "url": "https://github.com/getActivity/AndroidProject-Kotlin"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:36:58.353092+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "665b0a6699f6c2fb6bd706bf74f8d4a711aca88c40450da3f5706bce02a7d3c1", "fetched_at": "2026-08-28T04:05:25.576166+00:00", "kind": "readme", "missing": false, "url": "https://github.com/getActivity/AndroidProject-Kotlin"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:36:58.353092+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "665b0a6699f6c2fb6bd706bf74f8d4a711aca88c40450da3f5706bce02a7d3c1", "fetched_at": "2026-08-28T04:05:25.576166+00:00", "kind": "readme", "missing": false, "url": "https://github.com/getActivity/AndroidProject-Kotlin"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:25.576166+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:36:58.353092+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "665b0a6699f6c2fb6bd706bf74f8d4a711aca88c40450da3f5706bce02a7d3c1", "fetched_at": "2026-08-28T04:05:25.576166+00:00", "kind": "readme", "missing": false, "url": "https://github.com/getActivity/AndroidProject-Kotlin"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:36:58.353092+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "665b0a6699f6c2fb6bd706bf74f8d4a711aca88c40450da3f5706bce02a7d3c1", "fetched_at": "2026-08-28T04:05:25.576166+00:00", "kind": "readme", "missing": false, "url": "https://github.com/getActivity/AndroidProject-Kotlin"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:36:58.353092+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "665b0a6699f6c2fb6bd706bf74f8d4a711aca88c40450da3f5706bce02a7d3c1", "fetched_at": "2026-08-28T04:05:25.576166+00:00", "kind": "readme", "missing": false, "url": "https://github.com/getActivity/AndroidProject-Kotlin"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:36:58.353092+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "665b0a6699f6c2fb6bd706bf74f8d4a711aca88c40450da3f5706bce02a7d3c1", "fetched_at": "2026-08-28T04:05:25.576166+00:00", "kind": "readme", "missing": false, "url": "https://github.com/getActivity/AndroidProject-Kotlin"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 94, "longevity": 100, "rhythm": 30}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2072, "days_push": 41, "days_rel": 253, "gap_med": null, "n_releases_24m": 1}, "score": 73, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}