{"adoption": {"forks": 280, "observed_at": "2026-08-28T04:04:58.642969+00:00", "stars": 1528}, "canonical_url": "https://ross.abutalabs.com/products/canyie-pine", "card": {"archived": false, "artifact_type": "library", "description": "Dynamic java method hook framework on ART. Allowing you to change almost all java methods' behavior dynamically.", "domain": ["android-tools", "developer-tools", "reverse-engineering"], "enriched": true, "function": ["security", "developer-tools", "middleware"], "health_score": 51, "homepage": null, "language": "Java", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["canyie/pine"], "name": "canyie/pine", "platform": [], "pushed_at": "2025-11-08T08:00:23+00:00", "repo": "canyie/pine", "stars": 1528, "tags": ["android", "art-runtime", "method-hooking", "xposed-compatible", "aop", "java-hooking"], "topics": ["android", "art", "hook", "aop", "aop-framework", "xposed", "java-hook", "hook-framework", "hooking", "art-runtime"], "urls": [], "use_cases": ["hook java methods on android at runtime", "monitor activity lifecycle calls in an android app", "intercept thread creation and destruction for debugging", "bypass android ui thread checks to modify views off the main thread", "load xposed modules without root", "build an aop framework on android", "disable hidden api restrictions on android 9+"], "what_it_is": "Pine is a dynamic Java method hooking framework for the Android ART runtime, allowing interception and modification of almost any Java method call within the current process. It supports Android 4.4 through 15 on thumb-2/arm64 architectures and offers Xposed-style hooking and module loading.", "when_to_avoid": ["you need to hook native (C/C++) methods rather than Java methods", "you target x86/x86_64 devices or non-ART Dalvik runtimes", "you need resource hooking or other unsupported Xposed features", "you require a permissively licensed dependency, as it uses the Anti-996 license"], "when_to_choose": ["you need dynamic java method hooking on ART without root", "you want Xposed-style hooking or to run Xposed modules in-process", "you target a wide range of Android versions from 4.4 to 15 on arm devices"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/canyie-pine", "repo": "canyie/pine", "role": "main", "score": 55}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.642969+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:31:30.534691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cbcc8832ca0470bde4ad5abba94b2a8f55436a81e60156f5734b6ca29f6d8d01", "fetched_at": "2026-08-28T04:04:58.642969+00:00", "kind": "readme", "missing": false, "url": "https://github.com/canyie/pine"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.642969+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:31:30.534691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cbcc8832ca0470bde4ad5abba94b2a8f55436a81e60156f5734b6ca29f6d8d01", "fetched_at": "2026-08-28T04:04:58.642969+00:00", "kind": "readme", "missing": false, "url": "https://github.com/canyie/pine"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:31:30.534691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cbcc8832ca0470bde4ad5abba94b2a8f55436a81e60156f5734b6ca29f6d8d01", "fetched_at": "2026-08-28T04:04:58.642969+00:00", "kind": "readme", "missing": false, "url": "https://github.com/canyie/pine"}], "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:04:58.642969+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.642969+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.642969+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:31:30.534691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cbcc8832ca0470bde4ad5abba94b2a8f55436a81e60156f5734b6ca29f6d8d01", "fetched_at": "2026-08-28T04:04:58.642969+00:00", "kind": "readme", "missing": false, "url": "https://github.com/canyie/pine"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.642969+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.642969+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:31:30.534691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cbcc8832ca0470bde4ad5abba94b2a8f55436a81e60156f5734b6ca29f6d8d01", "fetched_at": "2026-08-28T04:04:58.642969+00:00", "kind": "readme", "missing": false, "url": "https://github.com/canyie/pine"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.642969+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.642969+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.642969+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:31:30.534691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cbcc8832ca0470bde4ad5abba94b2a8f55436a81e60156f5734b6ca29f6d8d01", "fetched_at": "2026-08-28T04:04:58.642969+00:00", "kind": "readme", "missing": false, "url": "https://github.com/canyie/pine"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.642969+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.642969+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:31:30.534691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cbcc8832ca0470bde4ad5abba94b2a8f55436a81e60156f5734b6ca29f6d8d01", "fetched_at": "2026-08-28T04:04:58.642969+00:00", "kind": "readme", "missing": false, "url": "https://github.com/canyie/pine"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:31:30.534691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cbcc8832ca0470bde4ad5abba94b2a8f55436a81e60156f5734b6ca29f6d8d01", "fetched_at": "2026-08-28T04:04:58.642969+00:00", "kind": "readme", "missing": false, "url": "https://github.com/canyie/pine"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:31:30.534691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cbcc8832ca0470bde4ad5abba94b2a8f55436a81e60156f5734b6ca29f6d8d01", "fetched_at": "2026-08-28T04:04:58.642969+00:00", "kind": "readme", "missing": false, "url": "https://github.com/canyie/pine"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:31:30.534691+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cbcc8832ca0470bde4ad5abba94b2a8f55436a81e60156f5734b6ca29f6d8d01", "fetched_at": "2026-08-28T04:04:58.642969+00:00", "kind": "readme", "missing": false, "url": "https://github.com/canyie/pine"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 51, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2320, "days_push": 298, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 55, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}