{"adoption": {"forks": 290, "observed_at": "2026-08-28T04:03:46.371644+00:00", "stars": 1149}, "canonical_url": "https://ross.abutalabs.com/products/changeskin", "card": {"archived": false, "artifact_type": "library", "description": "基于插件式的Android换肤框架，支持app内和或者外部插件式提供资源的换肤方案，无需重启Activity。[仅供参考原理，暂不维护]", "domain": ["mobile-development", "android-tools", "frontend"], "enriched": true, "function": ["ui-components", "theme", "mobile-framework"], "health_score": 20, "homepage": null, "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "abandoned", "member_repos": ["hongyangAndroid/ChangeSkin"], "name": "hongyangAndroid/ChangeSkin", "platform": ["jvm"], "pushed_at": "2017-04-18T10:19:40+00:00", "repo": "hongyangAndroid/ChangeSkin", "stars": 1149, "tags": ["android", "skin-switching", "dynamic-theming", "plugin-resources", "night-mode", "no-restart"], "topics": [], "urls": [], "use_cases": ["switch android app theme at runtime without restarting activities", "load skin resources from an external plugin apk", "implement night mode / dark theme in an android app", "bundle multiple in-app skin resource sets and switch between them", "hot-swap colors and drawables across all activities", "reset the app to its default skin programmatically"], "what_it_is": "ChangeSkin is a plugin-based skinning (dynamic theming) framework for Android apps, written in Java. It lets apps switch skins using resources from an external plugin APK or from resources bundled inside the app itself, without restarting activities.", "when_to_avoid": ["starting a new Android project - the repo is explicitly unmaintained and targets old Android tooling", "you only need simple day/night mode - AppCompat's DayNight theme or Material 3 dynamic theming are better supported", "you use Kotlin-first modern Android stacks (Jetpack Compose) where this LayoutInflater-based approach does not apply"], "when_to_choose": ["you maintain a legacy Java Android app that needs runtime skin switching without activity restarts", "you want skin resources delivered via a separate plugin apk", "you need both in-app and external-plugin theming in one mechanism"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/changeskin", "repo": "hongyangAndroid/ChangeSkin", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.371644+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:33:44.476021+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "59ba2b6972ad56dd7158e93126fbb8b599b6a6eee06c6b419decb6fcf4f672ff", "fetched_at": "2026-08-28T04:03:46.371644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/ChangeSkin"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.371644+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:33:44.476021+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "59ba2b6972ad56dd7158e93126fbb8b599b6a6eee06c6b419decb6fcf4f672ff", "fetched_at": "2026-08-28T04:03:46.371644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/ChangeSkin"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:33:44.476021+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "59ba2b6972ad56dd7158e93126fbb8b599b6a6eee06c6b419decb6fcf4f672ff", "fetched_at": "2026-08-28T04:03:46.371644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/ChangeSkin"}], "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:46.371644+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.371644+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.371644+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:33:44.476021+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "59ba2b6972ad56dd7158e93126fbb8b599b6a6eee06c6b419decb6fcf4f672ff", "fetched_at": "2026-08-28T04:03:46.371644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/ChangeSkin"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.371644+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.371644+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:33:44.476021+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "59ba2b6972ad56dd7158e93126fbb8b599b6a6eee06c6b419decb6fcf4f672ff", "fetched_at": "2026-08-28T04:03:46.371644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/ChangeSkin"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.371644+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.371644+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.371644+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:33:44.476021+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "59ba2b6972ad56dd7158e93126fbb8b599b6a6eee06c6b419decb6fcf4f672ff", "fetched_at": "2026-08-28T04:03:46.371644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/ChangeSkin"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.371644+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.371644+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:33:44.476021+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "59ba2b6972ad56dd7158e93126fbb8b599b6a6eee06c6b419decb6fcf4f672ff", "fetched_at": "2026-08-28T04:03:46.371644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/ChangeSkin"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:33:44.476021+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "59ba2b6972ad56dd7158e93126fbb8b599b6a6eee06c6b419decb6fcf4f672ff", "fetched_at": "2026-08-28T04:03:46.371644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/ChangeSkin"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:33:44.476021+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "59ba2b6972ad56dd7158e93126fbb8b599b6a6eee06c6b419decb6fcf4f672ff", "fetched_at": "2026-08-28T04:03:46.371644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/ChangeSkin"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:33:44.476021+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "59ba2b6972ad56dd7158e93126fbb8b599b6a6eee06c6b419decb6fcf4f672ff", "fetched_at": "2026-08-28T04:03:46.371644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/ChangeSkin"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3992, "days_push": 3424, "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}}