{"adoption": {"forks": 1351, "observed_at": "2026-08-28T04:10:04.974841+00:00", "stars": 7786}, "canonical_url": "https://ross.abutalabs.com/products/shadow", "card": {"archived": false, "artifact_type": "framework", "description": "零反射全动态Android插件框架", "domain": ["mobile-development", "android-tools", "developer-tools"], "enriched": true, "function": ["mobile-framework", "plugin-system", "developer-tools"], "health_score": 64, "homepage": null, "language": "Java", "license": "BSD-3-Clause", "license_family": "permissive", "maturity": "active", "member_repos": ["Tencent/Shadow"], "name": "Tencent/Shadow", "platform": ["jvm"], "pushed_at": "2026-03-23T21:01:46+00:00", "repo": "Tencent/Shadow", "stars": 7786, "tags": ["android-plugin-framework", "dynamic-loading", "zero-reflection", "hotfix", "tencent", "android"], "topics": ["android"], "urls": [], "use_cases": ["load feature modules dynamically in an Android app without Play Store updates", "run an APK as a plugin inside a host Android app", "reduce host app size by moving features into downloadable plugins", "avoid hidden API restrictions when implementing Android plugin technology", "update app features independently of the host APK", "run multiple plugin APKs inside one Android application"], "what_it_is": "Shadow is Tencent's open-source Android plugin framework that allows loading dynamically delivered plugin APKs without reflection or hidden API hacks. It supports all four Android components, lets plugin apps reuse normally installable source code, and keeps the host app's incremental footprint tiny (~15KB).", "when_to_avoid": ["you expect a plug-and-play solution with no secondary development", "your app targets only Google Play where dynamic code loading may violate policy", "you need a fully maintained turnkey framework rather than a foundation requiring customization", "your project is small enough that modularization or instant apps would suffice"], "when_to_choose": ["you need dynamic plugin loading on Android with minimal host footprint", "you want a plugin framework compatible with Google's non-SDK interface restrictions", "you need support for all four Android components, Fragments, and cross-process services in plugins", "you want the plugin framework itself to be updatable alongside plugins"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/shadow", "repo": "Tencent/Shadow", "role": "main", "score": 56}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:04.974841+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:34:43.603162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb0186e1347f8348fc38680c92bc1ab79afea687d3e482745f724fbe7797a262", "fetched_at": "2026-08-28T04:10:04.974841+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Tencent/Shadow"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:04.974841+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:34:43.603162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb0186e1347f8348fc38680c92bc1ab79afea687d3e482745f724fbe7797a262", "fetched_at": "2026-08-28T04:10:04.974841+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Tencent/Shadow"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:34:43.603162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb0186e1347f8348fc38680c92bc1ab79afea687d3e482745f724fbe7797a262", "fetched_at": "2026-08-28T04:10:04.974841+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Tencent/Shadow"}], "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:04.974841+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:04.974841+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:04.974841+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:34:43.603162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb0186e1347f8348fc38680c92bc1ab79afea687d3e482745f724fbe7797a262", "fetched_at": "2026-08-28T04:10:04.974841+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Tencent/Shadow"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:04.974841+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:04.974841+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:34:43.603162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb0186e1347f8348fc38680c92bc1ab79afea687d3e482745f724fbe7797a262", "fetched_at": "2026-08-28T04:10:04.974841+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Tencent/Shadow"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:04.974841+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:04.974841+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:04.974841+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:34:43.603162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb0186e1347f8348fc38680c92bc1ab79afea687d3e482745f724fbe7797a262", "fetched_at": "2026-08-28T04:10:04.974841+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Tencent/Shadow"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:04.974841+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:04.974841+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:34:43.603162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb0186e1347f8348fc38680c92bc1ab79afea687d3e482745f724fbe7797a262", "fetched_at": "2026-08-28T04:10:04.974841+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Tencent/Shadow"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:34:43.603162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb0186e1347f8348fc38680c92bc1ab79afea687d3e482745f724fbe7797a262", "fetched_at": "2026-08-28T04:10:04.974841+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Tencent/Shadow"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:34:43.603162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb0186e1347f8348fc38680c92bc1ab79afea687d3e482745f724fbe7797a262", "fetched_at": "2026-08-28T04:10:04.974841+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Tencent/Shadow"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:34:43.603162+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fb0186e1347f8348fc38680c92bc1ab79afea687d3e482745f724fbe7797a262", "fetched_at": "2026-08-28T04:10:04.974841+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Tencent/Shadow"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 73, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2638, "days_push": 163, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 56, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}