{"adoption": {"forks": 300, "observed_at": "2026-08-28T04:06:33.951690+00:00", "stars": 2283}, "canonical_url": "https://ross.abutalabs.com/products/privacysentry", "card": {"archived": false, "artifact_type": "plugin", "description": "Android隐私合规整改检测工具，注解+Asm修改字节码的检测方案", "domain": ["mobile-development", "android-tools", "security", "privacy", "developer-tools", "testing"], "enriched": true, "function": ["security", "privacy", "monitoring", "logging", "testing", "build-tool", "sdk"], "health_score": 56, "homepage": null, "language": "Kotlin", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["allenymt/PrivacySentry"], "name": "allenymt/PrivacySentry", "platform": ["jvm"], "pushed_at": "2025-12-30T06:16:38+00:00", "repo": "allenymt/PrivacySentry", "stars": 2283, "tags": ["android", "gradle-plugin", "bytecode-instrumentation", "asm", "booster", "privacy-compliance", "sensitive-api-hooking", "miit-compliance", "app-store-review", "privacy-audit", "kotlin", "hooking", "china", "mobile"], "topics": [], "urls": [], "use_cases": ["detect sensitive API calls in my Android app before a privacy compliance audit", "pass MIIT / app-store privacy compliance review for an Android app in China", "hook Android methods that read IMEI, device ID, or other personal data", "block sensitive APIs until the user accepts the privacy policy", "generate a report of personal data collection calls across my app and third-party SDKs", "instrument bytecode at compile time without adding runtime performance overhead"], "what_it_is": "PrivacySentry is an Android privacy compliance toolkit combining a Gradle plugin with a runtime SDK, using annotations plus ASM bytecode instrumentation (via the Booster framework) at compile time. It intercepts and records calls to 60+ sensitive APIs (device identifiers, personal data access), supports delaying calls until the user accepts the privacy agreement, and generates Excel reports of all detected calls to help apps pass app-store and MIIT compliance reviews.", "when_to_avoid": ["Your project is not Android (iOS, web, or server-side software)", "You are on AGP below 8.0 and cannot or will not use the legacy 1.3.6 release line", "You need runtime dynamic hooking (Xposed-style) rather than build-time static instrumentation", "Your app depends on third-party SDKs that perform their own ASM transformations (e.g., AMap) and conflict with the plugin"], "when_to_choose": ["You ship an Android app to Chinese app stores and must satisfy MIIT privacy compliance requirements", "You want compile-time bytecode instrumentation of sensitive API calls with zero runtime performance cost", "You need automated, exportable (Excel) audit trails of who called which sensitive API and when", "You need to defer or gate sensitive API calls until after the user agrees to the privacy notice, with multi-process support"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/privacysentry", "repo": "allenymt/PrivacySentry", "role": "main", "score": 49}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.951690+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:41:18.587530+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c4d66ae913e271829bab1628a31ad15ebcaba3469d71a72842a0b7c6cab3d38", "fetched_at": "2026-08-28T04:06:33.951690+00:00", "kind": "readme", "missing": false, "url": "https://github.com/allenymt/PrivacySentry"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.951690+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:41:18.587530+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c4d66ae913e271829bab1628a31ad15ebcaba3469d71a72842a0b7c6cab3d38", "fetched_at": "2026-08-28T04:06:33.951690+00:00", "kind": "readme", "missing": false, "url": "https://github.com/allenymt/PrivacySentry"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:41:18.587530+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c4d66ae913e271829bab1628a31ad15ebcaba3469d71a72842a0b7c6cab3d38", "fetched_at": "2026-08-28T04:06:33.951690+00:00", "kind": "readme", "missing": false, "url": "https://github.com/allenymt/PrivacySentry"}], "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:06:33.951690+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.951690+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.951690+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:41:18.587530+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c4d66ae913e271829bab1628a31ad15ebcaba3469d71a72842a0b7c6cab3d38", "fetched_at": "2026-08-28T04:06:33.951690+00:00", "kind": "readme", "missing": false, "url": "https://github.com/allenymt/PrivacySentry"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.951690+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.951690+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:41:18.587530+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c4d66ae913e271829bab1628a31ad15ebcaba3469d71a72842a0b7c6cab3d38", "fetched_at": "2026-08-28T04:06:33.951690+00:00", "kind": "readme", "missing": false, "url": "https://github.com/allenymt/PrivacySentry"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.951690+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.951690+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.951690+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:41:18.587530+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c4d66ae913e271829bab1628a31ad15ebcaba3469d71a72842a0b7c6cab3d38", "fetched_at": "2026-08-28T04:06:33.951690+00:00", "kind": "readme", "missing": false, "url": "https://github.com/allenymt/PrivacySentry"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.951690+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.951690+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:41:18.587530+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c4d66ae913e271829bab1628a31ad15ebcaba3469d71a72842a0b7c6cab3d38", "fetched_at": "2026-08-28T04:06:33.951690+00:00", "kind": "readme", "missing": false, "url": "https://github.com/allenymt/PrivacySentry"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:41:18.587530+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c4d66ae913e271829bab1628a31ad15ebcaba3469d71a72842a0b7c6cab3d38", "fetched_at": "2026-08-28T04:06:33.951690+00:00", "kind": "readme", "missing": false, "url": "https://github.com/allenymt/PrivacySentry"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:41:18.587530+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c4d66ae913e271829bab1628a31ad15ebcaba3469d71a72842a0b7c6cab3d38", "fetched_at": "2026-08-28T04:06:33.951690+00:00", "kind": "readme", "missing": false, "url": "https://github.com/allenymt/PrivacySentry"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:41:18.587530+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c4d66ae913e271829bab1628a31ad15ebcaba3469d71a72842a0b7c6cab3d38", "fetched_at": "2026-08-28T04:06:33.951690+00:00", "kind": "readme", "missing": false, "url": "https://github.com/allenymt/PrivacySentry"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 59, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1752, "days_push": 246, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 49, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}