{"adoption": {"forks": 1690, "observed_at": "2026-08-28T04:10:02.514216+00:00", "stars": 7705}, "canonical_url": "https://ross.abutalabs.com/products/mvvmhabit", "card": {"archived": false, "artifact_type": "framework", "description": "👕基于谷歌最新AAC架构，MVVM设计模式的一套快速开发库，整合Okhttp+RxJava+Retrofit+Glide等主流模块，满足日常开发需求。使用该框架可以快速开发一个高质量、易维护的Android应用。", "domain": ["mobile-development", "android-tools", "web-development"], "enriched": true, "function": ["web-framework", "http-client", "state-management", "middleware"], "health_score": 20, "homepage": null, "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["goldze/MVVMHabit"], "name": "goldze/MVVMHabit", "platform": ["jvm"], "pushed_at": "2022-08-11T09:18:55+00:00", "repo": "goldze/MVVMHabit", "stars": 7705, "tags": ["mvvm", "databinding", "retrofit", "rxjava", "okhttp", "glide", "aac", "android-architecture", "boilerplate", "rapid-development", "android", "mobile"], "topics": ["mvvm", "databinding", "retrofit", "retrofit2", "rxjava", "okhttp", "glide", "mvvm-library", "rxjava2", "aac", "lifecycle"], "urls": [], "use_cases": ["build an Android app with MVVM architecture", "scaffold a new Android project with Retrofit and RxJava networking", "eliminate findViewById and setText boilerplate with DataBinding", "manage Activity lifecycle and global app state in one place", "handle network requests, permissions, and image loading out of the box", "learn MVVM with Google's AAC components in practice"], "what_it_is": "MVVMHabit is an Android rapid-development framework built on Google's AAC architecture (DataBinding, LiveData, ViewModel) following the MVVM design pattern. It integrates popular libraries like Okhttp, RxJava, Retrofit, and Glide, along with base classes and global utilities, to help developers quickly build high-quality, maintainable Android apps.", "when_to_avoid": ["you use Jetpack Compose instead of XML DataBinding", "you prefer Kotlin-first stacks like Kotlin coroutines and Ktor", "you need a framework with frequent recent updates (last release 2022)", "your project already has an established architecture"], "when_to_choose": ["starting a new Android app that should follow MVVM with AAC", "you want networking (Retrofit/Okhttp), image loading (Glide), and RxJava pre-integrated", "you prefer DataBinding-driven UI with BindingAdapters", "you need base classes for Activity/Fragment/ViewModel to reduce boilerplate"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mvvmhabit", "repo": "goldze/MVVMHabit", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:02.514216+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:35:27.024505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "10119ce78dd63f0be5a05342a293095a4e3f47320c53d4d718b240f350158bef", "fetched_at": "2026-08-28T04:10:02.514216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/goldze/MVVMHabit"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:02.514216+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:35:27.024505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "10119ce78dd63f0be5a05342a293095a4e3f47320c53d4d718b240f350158bef", "fetched_at": "2026-08-28T04:10:02.514216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/goldze/MVVMHabit"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:35:27.024505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "10119ce78dd63f0be5a05342a293095a4e3f47320c53d4d718b240f350158bef", "fetched_at": "2026-08-28T04:10:02.514216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/goldze/MVVMHabit"}], "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:02.514216+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:02.514216+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:02.514216+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:35:27.024505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "10119ce78dd63f0be5a05342a293095a4e3f47320c53d4d718b240f350158bef", "fetched_at": "2026-08-28T04:10:02.514216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/goldze/MVVMHabit"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:02.514216+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:02.514216+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:35:27.024505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "10119ce78dd63f0be5a05342a293095a4e3f47320c53d4d718b240f350158bef", "fetched_at": "2026-08-28T04:10:02.514216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/goldze/MVVMHabit"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:02.514216+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:02.514216+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:02.514216+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:35:27.024505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "10119ce78dd63f0be5a05342a293095a4e3f47320c53d4d718b240f350158bef", "fetched_at": "2026-08-28T04:10:02.514216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/goldze/MVVMHabit"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:02.514216+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:02.514216+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:35:27.024505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "10119ce78dd63f0be5a05342a293095a4e3f47320c53d4d718b240f350158bef", "fetched_at": "2026-08-28T04:10:02.514216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/goldze/MVVMHabit"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:35:27.024505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "10119ce78dd63f0be5a05342a293095a4e3f47320c53d4d718b240f350158bef", "fetched_at": "2026-08-28T04:10:02.514216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/goldze/MVVMHabit"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:35:27.024505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "10119ce78dd63f0be5a05342a293095a4e3f47320c53d4d718b240f350158bef", "fetched_at": "2026-08-28T04:10:02.514216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/goldze/MVVMHabit"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:35:27.024505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "10119ce78dd63f0be5a05342a293095a4e3f47320c53d4d718b240f350158bef", "fetched_at": "2026-08-28T04:10:02.514216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/goldze/MVVMHabit"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3330, "days_push": 1483, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}