{"adoption": {"forks": 125, "observed_at": "2026-08-28T04:03:30.627006+00:00", "stars": 1080}, "canonical_url": "https://ross.abutalabs.com/products/s-mvp", "card": {"archived": false, "artifact_type": "framework", "description": "🔥🔥优化版MVP,使用注解泛型简化代码编写，使用模块化协议方便维护，APT过程使用注解解析器利用JavaPoet🌝完成重复模块的编写，利用ASpect+GradlePlugin 完成横向AOP编程+Javassist动态字节码注入+Tinker实现热修复+Retrofit实现优雅网络操作+RxJava轻松玩转数据处理", "domain": ["mobile-development", "android-tools", "developer-tools", "web-development"], "enriched": true, "function": ["web-framework", "middleware", "developer-tools", "build-tool", "logging", "caching", "http-client", "concurrency"], "health_score": 20, "homepage": null, "language": "Java", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["UCodeUStory/S-MVP"], "name": "UCodeUStory/S-MVP", "platform": ["jvm"], "pushed_at": "2019-08-23T08:21:00+00:00", "repo": "UCodeUStory/S-MVP", "stars": 1080, "tags": ["mvp", "android", "aspectj", "javassist", "apt", "annotation-processing", "tinker", "hotfix", "retrofit", "rxjava", "aop", "bytecode-injection", "lifecycle", "modular-architecture", "chinese-documentation", "gradle"], "topics": ["mvp", "javassist", "gradle", "aspectj", "apt", "hook", "javassist-aop", "android", "rxjava", "retrofit2", "lifecycle"], "urls": [], "use_cases": ["reduce MVP boilerplate classes in Android apps", "generate Presenter code automatically with annotations", "apply AOP cross-cutting concerns like logging and caching in Android", "inject bytecode without modifying source code using Javassist", "implement hot fixes in production Android apps with Tinker", "coordinate multiple parallel async requests and merge results", "chain sequential network requests without nested callbacks", "bind views with a custom annotation-based BindView"], "what_it_is": "An optimized Android MVP framework written in Java that simplifies Presenter/View boilerplate using annotations, generics, and APT code generation with JavaPoet. It integrates AspectJ via a Gradle plugin, Javassist bytecode injection, Tinker hot-fixing, Retrofit networking, and RxJava for reactive data handling.", "when_to_avoid": ["starting a new Android project where modern MVVM/MVI with Kotlin and Jetpack is preferred", "the project is inactive and targets older Android SDKs and Java-based tooling", "you want minimal dependencies rather than a full framework with bytecode weaving and hot-fix tooling"], "when_to_choose": ["building an Android app with MVP architecture and less boilerplate", "you want AOP features like method timing logs, memory caching, and login checks via annotations", "you need coordinated parallel or serial async task management", "you want an integrated stack of Retrofit, RxJava, and Tinker hot-fixing"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/s-mvp", "repo": "UCodeUStory/S-MVP", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.627006+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:51:26.408921+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc1cb2ad08b4ffe7e5e23786763a14fb2595583ec1f6449102df14a0e9946a9", "fetched_at": "2026-08-28T04:03:30.627006+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UCodeUStory/S-MVP"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.627006+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:51:26.408921+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc1cb2ad08b4ffe7e5e23786763a14fb2595583ec1f6449102df14a0e9946a9", "fetched_at": "2026-08-28T04:03:30.627006+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UCodeUStory/S-MVP"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:51:26.408921+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc1cb2ad08b4ffe7e5e23786763a14fb2595583ec1f6449102df14a0e9946a9", "fetched_at": "2026-08-28T04:03:30.627006+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UCodeUStory/S-MVP"}], "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:03:30.627006+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.627006+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.627006+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:51:26.408921+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc1cb2ad08b4ffe7e5e23786763a14fb2595583ec1f6449102df14a0e9946a9", "fetched_at": "2026-08-28T04:03:30.627006+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UCodeUStory/S-MVP"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.627006+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.627006+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:51:26.408921+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc1cb2ad08b4ffe7e5e23786763a14fb2595583ec1f6449102df14a0e9946a9", "fetched_at": "2026-08-28T04:03:30.627006+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UCodeUStory/S-MVP"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.627006+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.627006+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.627006+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:51:26.408921+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc1cb2ad08b4ffe7e5e23786763a14fb2595583ec1f6449102df14a0e9946a9", "fetched_at": "2026-08-28T04:03:30.627006+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UCodeUStory/S-MVP"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.627006+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.627006+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:51:26.408921+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc1cb2ad08b4ffe7e5e23786763a14fb2595583ec1f6449102df14a0e9946a9", "fetched_at": "2026-08-28T04:03:30.627006+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UCodeUStory/S-MVP"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:51:26.408921+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc1cb2ad08b4ffe7e5e23786763a14fb2595583ec1f6449102df14a0e9946a9", "fetched_at": "2026-08-28T04:03:30.627006+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UCodeUStory/S-MVP"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:51:26.408921+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc1cb2ad08b4ffe7e5e23786763a14fb2595583ec1f6449102df14a0e9946a9", "fetched_at": "2026-08-28T04:03:30.627006+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UCodeUStory/S-MVP"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:51:26.408921+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc1cb2ad08b4ffe7e5e23786763a14fb2595583ec1f6449102df14a0e9946a9", "fetched_at": "2026-08-28T04:03:30.627006+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UCodeUStory/S-MVP"}], "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": 3248, "days_push": 2567, "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}}