{"adoption": {"forks": 268, "observed_at": "2026-08-28T04:05:21.791727+00:00", "stars": 1682}, "canonical_url": "https://ross.abutalabs.com/products/camille", "card": {"archived": false, "artifact_type": "cli-tool", "description": "基于Frida的Android App隐私合规检测辅助工具", "domain": ["security", "android-tools", "privacy", "mobile-development"], "enriched": true, "function": ["security", "penetration-testing", "monitoring"], "health_score": 20, "homepage": null, "language": "JavaScript", "license": null, "license_family": "other", "maturity": "maintenance", "member_repos": ["zhengjim/camille"], "name": "zhengjim/camille", "platform": ["python", "cli"], "pushed_at": "2023-07-21T03:30:50+00:00", "repo": "zhengjim/camille", "stars": 1682, "tags": ["frida", "privacy-compliance", "android-hooking", "app-audit", "sensitive-api-detection", "android"], "topics": [], "urls": [], "use_cases": ["detect which sensitive Android APIs an app calls", "check if third-party SDKs collect user data before consent", "audit an app for privacy compliance before regulatory review", "hook Android device info, location, and contacts access", "trace sensitive behavior of hardened Android apps"], "what_it_is": "Camille is a Frida-based auxiliary tool for detecting Android app privacy compliance. It hooks sensitive Android APIs to reveal whether the app or third-party SDKs access user data, helping check compliance with privacy regulations.", "when_to_avoid": ["you need fully automated compliance testing without manual interaction", "you target non-Android platforms", "you cannot run a rooted device or frida-server"], "when_to_choose": ["you need to audit Android apps for privacy regulation compliance", "you want to see which components trigger sensitive API calls at runtime", "you have a rooted device or emulator and want Frida-based dynamic analysis"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/camille", "repo": "zhengjim/camille", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.791727+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.962174+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4460f6980a1fec69c4af2adf4ab912194e6c54bfd768a9d23be3f528908c173f", "fetched_at": "2026-08-28T04:05:21.791727+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zhengjim/camille"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.791727+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.962174+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4460f6980a1fec69c4af2adf4ab912194e6c54bfd768a9d23be3f528908c173f", "fetched_at": "2026-08-28T04:05:21.791727+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zhengjim/camille"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.962174+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4460f6980a1fec69c4af2adf4ab912194e6c54bfd768a9d23be3f528908c173f", "fetched_at": "2026-08-28T04:05:21.791727+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zhengjim/camille"}], "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:05:21.791727+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.791727+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.791727+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.962174+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4460f6980a1fec69c4af2adf4ab912194e6c54bfd768a9d23be3f528908c173f", "fetched_at": "2026-08-28T04:05:21.791727+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zhengjim/camille"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.791727+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.791727+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.962174+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4460f6980a1fec69c4af2adf4ab912194e6c54bfd768a9d23be3f528908c173f", "fetched_at": "2026-08-28T04:05:21.791727+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zhengjim/camille"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.791727+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.791727+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.791727+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.962174+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4460f6980a1fec69c4af2adf4ab912194e6c54bfd768a9d23be3f528908c173f", "fetched_at": "2026-08-28T04:05:21.791727+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zhengjim/camille"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.791727+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:21.791727+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.962174+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4460f6980a1fec69c4af2adf4ab912194e6c54bfd768a9d23be3f528908c173f", "fetched_at": "2026-08-28T04:05:21.791727+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zhengjim/camille"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.962174+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4460f6980a1fec69c4af2adf4ab912194e6c54bfd768a9d23be3f528908c173f", "fetched_at": "2026-08-28T04:05:21.791727+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zhengjim/camille"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.962174+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4460f6980a1fec69c4af2adf4ab912194e6c54bfd768a9d23be3f528908c173f", "fetched_at": "2026-08-28T04:05:21.791727+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zhengjim/camille"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:41:23.962174+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4460f6980a1fec69c4af2adf4ab912194e6c54bfd768a9d23be3f528908c173f", "fetched_at": "2026-08-28T04:05:21.791727+00:00", "kind": "readme", "missing": false, "url": "https://github.com/zhengjim/camille"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:39:23.370411+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": 1771, "days_push": 1139, "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}}