{"adoption": {"forks": 1644, "observed_at": "2026-08-28T04:10:26.293406+00:00", "stars": 8917}, "canonical_url": "https://ross.abutalabs.com/products/jetpack-mvvm-best-practice", "card": {"archived": false, "artifact_type": "learning-resource", "description": "难得一见 Jetpack MVVM 最佳实践。在 \"以简驭繁\" 代码中，对 \"视图控制器\" 乃至 \"标准化开发模式\" 形成正确、深入理解。", "domain": ["android-tools", "mobile-development", "tutorials", "web-development"], "enriched": true, "function": ["mobile-framework", "state-management", "ui-components", "developer-tools"], "health_score": 20, "homepage": null, "language": "Java", "license": null, "license_family": "other", "maturity": "maintenance", "member_repos": ["KunMinX/Jetpack-MVVM-Best-Practice", "KunMinX/Jetpack-MVVM-Scaffold"], "name": "Jetpack MVVM Best Practice", "platform": ["jvm"], "pushed_at": "2024-02-07T21:55:33+00:00", "repo": "KunMinX/Jetpack-MVVM-Best-Practice", "stars": 8917, "tags": ["jetpack", "mvvm", "android-architecture", "viewmodel", "livedata", "databinding", "sample-project", "best-practices", "android"], "topics": ["jetpack", "mvvm"], "urls": [], "use_cases": ["learn jetpack mvvm architecture for android", "understand viewmodel and livedata responsibilities", "see best practices for android app architecture", "handle configuration changes like rotation without state loss", "structure an android project with mvvm pattern", "learn data binding and navigation component usage"], "what_it_is": "A well-known Android sample project demonstrating Jetpack MVVM best practices, designed as a companion to the author's article series on Jetpack architecture components. It showcases standardized development patterns using ViewModel, LiveData, DataBinding, and Navigation through carefully crafted app scenarios.", "when_to_avoid": ["you need a production-ready library or framework to drop into your app - this is a sample/educational project", "you use Kotlin-first modern Android stacks like Compose, since this project is Java-based", "you need a maintained dependency with a license - the repo has no license and is in maintenance mode"], "when_to_choose": ["you are an Android developer learning Jetpack MVVM from a real, complete example", "you want a reference architecture for structuring ViewModel/LiveData/DataBinding usage", "you want to understand why each Jetpack component exists and its boundaries"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/repos/KunMinX/Jetpack-MVVM-Best-Practice", "repo": "KunMinX/Jetpack-MVVM-Best-Practice", "role": "main", "score": 32}, {"path": "/repos/KunMinX/Jetpack-MVVM-Scaffold", "repo": "KunMinX/Jetpack-MVVM-Scaffold", "role": "mirror", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:26.293406+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:24:33.371055+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "342f86ca3f637131d80a6f095a8f06d2535d7e13607cb4c8850f679835e8c5fd", "fetched_at": "2026-08-28T04:10:26.293406+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KunMinX/Jetpack-MVVM-Best-Practice"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:26.293406+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:24:33.371055+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "342f86ca3f637131d80a6f095a8f06d2535d7e13607cb4c8850f679835e8c5fd", "fetched_at": "2026-08-28T04:10:26.293406+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KunMinX/Jetpack-MVVM-Best-Practice"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:24:33.371055+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "342f86ca3f637131d80a6f095a8f06d2535d7e13607cb4c8850f679835e8c5fd", "fetched_at": "2026-08-28T04:10:26.293406+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KunMinX/Jetpack-MVVM-Best-Practice"}], "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:10:26.293406+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:26.293406+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:26.293406+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:24:33.371055+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "342f86ca3f637131d80a6f095a8f06d2535d7e13607cb4c8850f679835e8c5fd", "fetched_at": "2026-08-28T04:10:26.293406+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KunMinX/Jetpack-MVVM-Best-Practice"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:26.293406+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:26.293406+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:24:33.371055+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "342f86ca3f637131d80a6f095a8f06d2535d7e13607cb4c8850f679835e8c5fd", "fetched_at": "2026-08-28T04:10:26.293406+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KunMinX/Jetpack-MVVM-Best-Practice"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:26.293406+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:26.293406+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:26.293406+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:24:33.371055+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "342f86ca3f637131d80a6f095a8f06d2535d7e13607cb4c8850f679835e8c5fd", "fetched_at": "2026-08-28T04:10:26.293406+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KunMinX/Jetpack-MVVM-Best-Practice"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:26.293406+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:26.293406+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:24:33.371055+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "342f86ca3f637131d80a6f095a8f06d2535d7e13607cb4c8850f679835e8c5fd", "fetched_at": "2026-08-28T04:10:26.293406+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KunMinX/Jetpack-MVVM-Best-Practice"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:24:33.371055+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "342f86ca3f637131d80a6f095a8f06d2535d7e13607cb4c8850f679835e8c5fd", "fetched_at": "2026-08-28T04:10:26.293406+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KunMinX/Jetpack-MVVM-Best-Practice"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:24:33.371055+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "342f86ca3f637131d80a6f095a8f06d2535d7e13607cb4c8850f679835e8c5fd", "fetched_at": "2026-08-28T04:10:26.293406+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KunMinX/Jetpack-MVVM-Best-Practice"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:24:33.371055+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "342f86ca3f637131d80a6f095a8f06d2535d7e13607cb4c8850f679835e8c5fd", "fetched_at": "2026-08-28T04:10:26.293406+00:00", "kind": "readme", "missing": false, "url": "https://github.com/KunMinX/Jetpack-MVVM-Best-Practice"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2498, "days_push": 938, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}