{"adoption": {"forks": 247, "observed_at": "2026-08-28T04:03:28.864356+00:00", "stars": 1073}, "canonical_url": "https://ross.abutalabs.com/products/android-dynamical-loading", "card": {"archived": false, "artifact_type": "library", "description": "🔌 Android plugin development library (Frontia) and tech introductions, which means that you can upgrade your Android APP or fix emergent bugs, as well as reduce the file size of Apk without any re-installation.", "domain": ["android-tools", "mobile-development", "developer-tools", "tutorials"], "enriched": true, "function": ["plugin-system", "developer-tools"], "health_score": 20, "homepage": null, "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["kaedea/android-dynamical-loading"], "name": "kaedea/android-dynamical-loading", "platform": ["jvm"], "pushed_at": "2020-10-01T05:30:43+00:00", "repo": "kaedea/android-dynamical-loading", "stars": 1073, "tags": ["android-plugin-framework", "dynamic-loading", "hotfix", "classloader", "apk-slimming", "android-frontia", "android", "mobile"], "topics": [], "urls": [], "use_cases": ["update android app features without reinstalling apk", "hot fix urgent bugs in a released android app", "reduce apk size by dynamically loading so libraries or modules", "download and manage plugins inside an android host app", "learn how android classloader and dynamic loading work internally", "implement downloadable themes for an android app"], "what_it_is": "An Android plugin development library (Frontia) plus a collection of articles and demo projects about ClassLoader-based dynamic loading on Android. It enables updating an app, hot-fixing emergent bugs, and slimming APK size without reinstalling.", "when_to_avoid": ["you want to ship regular business features via plugins - the author explicitly discourages this as it makes development and maintenance hard to control", "you need a modern, actively maintained plugin solution - the latest release is from 2020", "your project targets recent android versions with tightened restrictions on dynamic code loading"], "when_to_choose": ["you need a classloader-based plugin framework focused on plugin download, update, install and management", "you want to study android dynamic loading mechanisms through articles and demo projects", "you need emergency hotfix capability in an android app"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/android-dynamical-loading", "repo": "kaedea/android-dynamical-loading", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.864356+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.118950+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0e3f1c7aa70d0151616bfb43aeac0189876bff2964a8ba6f23297556be0cecf", "fetched_at": "2026-08-28T04:03:28.864356+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kaedea/android-dynamical-loading"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.864356+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.118950+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0e3f1c7aa70d0151616bfb43aeac0189876bff2964a8ba6f23297556be0cecf", "fetched_at": "2026-08-28T04:03:28.864356+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kaedea/android-dynamical-loading"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.118950+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0e3f1c7aa70d0151616bfb43aeac0189876bff2964a8ba6f23297556be0cecf", "fetched_at": "2026-08-28T04:03:28.864356+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kaedea/android-dynamical-loading"}], "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:28.864356+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.864356+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.864356+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.118950+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0e3f1c7aa70d0151616bfb43aeac0189876bff2964a8ba6f23297556be0cecf", "fetched_at": "2026-08-28T04:03:28.864356+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kaedea/android-dynamical-loading"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.864356+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.864356+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.118950+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0e3f1c7aa70d0151616bfb43aeac0189876bff2964a8ba6f23297556be0cecf", "fetched_at": "2026-08-28T04:03:28.864356+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kaedea/android-dynamical-loading"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.864356+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.864356+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.864356+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.118950+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0e3f1c7aa70d0151616bfb43aeac0189876bff2964a8ba6f23297556be0cecf", "fetched_at": "2026-08-28T04:03:28.864356+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kaedea/android-dynamical-loading"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.864356+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.864356+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.118950+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0e3f1c7aa70d0151616bfb43aeac0189876bff2964a8ba6f23297556be0cecf", "fetched_at": "2026-08-28T04:03:28.864356+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kaedea/android-dynamical-loading"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.118950+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0e3f1c7aa70d0151616bfb43aeac0189876bff2964a8ba6f23297556be0cecf", "fetched_at": "2026-08-28T04:03:28.864356+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kaedea/android-dynamical-loading"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.118950+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0e3f1c7aa70d0151616bfb43aeac0189876bff2964a8ba6f23297556be0cecf", "fetched_at": "2026-08-28T04:03:28.864356+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kaedea/android-dynamical-loading"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.118950+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d0e3f1c7aa70d0151616bfb43aeac0189876bff2964a8ba6f23297556be0cecf", "fetched_at": "2026-08-28T04:03:28.864356+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kaedea/android-dynamical-loading"}], "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": 4051, "days_push": 2162, "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}}