{"adoption": {"forks": 227, "observed_at": "2026-08-28T04:03:40.688271+00:00", "stars": 1124}, "canonical_url": "https://ross.abutalabs.com/products/updateapputils", "card": {"archived": false, "artifact_type": "library", "description": "一行代码快速实现app版本更新", "domain": ["mobile-development", "android-tools", "developer-tools"], "enriched": true, "function": ["mobile-framework", "file-upload", "http-client"], "health_score": 20, "homepage": null, "language": "Kotlin", "license": null, "license_family": "other", "maturity": "maintenance", "member_repos": ["teprinciple/UpdateAppUtils"], "name": "teprinciple/UpdateAppUtils", "platform": ["jvm"], "pushed_at": "2021-07-07T08:57:56+00:00", "repo": "teprinciple/UpdateAppUtils", "stars": 1124, "tags": ["app-update", "apk-download", "version-update", "in-app-update", "android-library", "kotlin-first", "md5-verification", "androidx-support", "update-dialog", "notification-bar", "android"], "topics": ["updateapp", "android", "update", "kotlin", "versionupdate"], "urls": [], "use_cases": ["add in-app version update to an android app", "download and install apk updates inside my app", "show a custom update dialog with changelog", "force users to update to the latest app version", "verify apk integrity with md5 before installing", "show download progress in the notification bar", "delete the apk installer automatically after update"], "what_it_is": "A Kotlin-first Android library that lets developers implement in-app version updates with a single line of code, handling APK download, MD5 verification, and installation. It provides customizable update dialogs, notification bar integration, and supports both forced and optional update flows.", "when_to_avoid": ["you need google play in-app updates (play core api)", "you distribute only through app stores that handle updates", "you need ios or cross-platform update support", "you require active maintenance or recent security patches"], "when_to_choose": ["you need a quick, one-line solution for android app updates", "you want customizable update ui with minimal code", "you need md5 verification and wifi-check features built in", "your project uses kotlin or androidx"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/updateapputils", "repo": "teprinciple/UpdateAppUtils", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:40.688271+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:39:51.609945+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ef9fbd9243228156daa16d9776c26ca01a299671a1d5871fe493cf77fa511534", "fetched_at": "2026-08-28T04:03:40.688271+00:00", "kind": "readme", "missing": false, "url": "https://github.com/teprinciple/UpdateAppUtils"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:40.688271+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:39:51.609945+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ef9fbd9243228156daa16d9776c26ca01a299671a1d5871fe493cf77fa511534", "fetched_at": "2026-08-28T04:03:40.688271+00:00", "kind": "readme", "missing": false, "url": "https://github.com/teprinciple/UpdateAppUtils"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:39:51.609945+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ef9fbd9243228156daa16d9776c26ca01a299671a1d5871fe493cf77fa511534", "fetched_at": "2026-08-28T04:03:40.688271+00:00", "kind": "readme", "missing": false, "url": "https://github.com/teprinciple/UpdateAppUtils"}], "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:40.688271+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:40.688271+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:40.688271+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:39:51.609945+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ef9fbd9243228156daa16d9776c26ca01a299671a1d5871fe493cf77fa511534", "fetched_at": "2026-08-28T04:03:40.688271+00:00", "kind": "readme", "missing": false, "url": "https://github.com/teprinciple/UpdateAppUtils"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:40.688271+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:40.688271+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:39:51.609945+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ef9fbd9243228156daa16d9776c26ca01a299671a1d5871fe493cf77fa511534", "fetched_at": "2026-08-28T04:03:40.688271+00:00", "kind": "readme", "missing": false, "url": "https://github.com/teprinciple/UpdateAppUtils"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:40.688271+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:40.688271+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:40.688271+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:39:51.609945+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ef9fbd9243228156daa16d9776c26ca01a299671a1d5871fe493cf77fa511534", "fetched_at": "2026-08-28T04:03:40.688271+00:00", "kind": "readme", "missing": false, "url": "https://github.com/teprinciple/UpdateAppUtils"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:40.688271+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:40.688271+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:39:51.609945+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ef9fbd9243228156daa16d9776c26ca01a299671a1d5871fe493cf77fa511534", "fetched_at": "2026-08-28T04:03:40.688271+00:00", "kind": "readme", "missing": false, "url": "https://github.com/teprinciple/UpdateAppUtils"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:39:51.609945+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ef9fbd9243228156daa16d9776c26ca01a299671a1d5871fe493cf77fa511534", "fetched_at": "2026-08-28T04:03:40.688271+00:00", "kind": "readme", "missing": false, "url": "https://github.com/teprinciple/UpdateAppUtils"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:39:51.609945+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ef9fbd9243228156daa16d9776c26ca01a299671a1d5871fe493cf77fa511534", "fetched_at": "2026-08-28T04:03:40.688271+00:00", "kind": "readme", "missing": false, "url": "https://github.com/teprinciple/UpdateAppUtils"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:39:51.609945+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ef9fbd9243228156daa16d9776c26ca01a299671a1d5871fe493cf77fa511534", "fetched_at": "2026-08-28T04:03:40.688271+00:00", "kind": "readme", "missing": false, "url": "https://github.com/teprinciple/UpdateAppUtils"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3534, "days_push": 1883, "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}}